2017-02-05 9 views
4

私はPythonには初めてです。私は<class 'str'>で混乱しています。 私が使用してSTRを得た:<class 'str'>と<type 'str'>の違いは何ですか?

response = urllib.request.urlopen(req).read().decode() 

'応答' のタイプ<class 'str'>、ない<type 'str'>です。 私は「forループ」で、このSTRを操作しよう:

for ID in response: 

の応答は」ではない線で、しかし文字によって読み取られます。 私は '応答'のすべての行をリストの個々の要素に入れるつもりです。今私は応答をファイルに書かなければならず、 'open'を使用して 'for loop'で使用できる<type 'str'>の文字列を取得する必要があります。

+1

Python 2またはPython 3を使用していますか? – jwodder

+0

'response = urllib.request.urlopen(req)'? – Ryan

+0

Python 3. libでOKです。 –

答えて

3

違いはありません。 Pythonは、typeオブジェクトのテキスト表現を、Python 2(Types are written like this: <type 'int'>.)とpython 3(Types are written like this: <class 'int'>.)の間で変更しました。両方のpython 2と3では、型オブジェクトの種類は、種類、ええと、次のとおりです。

パイソン2

>>> type(type('a')) 
<type 'type'> 

のpython 3

>>> type(type('a')) 
<class 'type'> 

そして、それは、変更の理由です。.. 。文字列表現は、型がクラスであることを明確にします。問題の残りの部分については

for ID in response: 

responseは文字列であり、それを列挙すると、文字列内の文字を提供します。応答のタイプに応じて、HTMLやJSONなどのパーサーを使用して、Pythonオブジェクトに変換することができます。

+0

あなたは正しいです。それはPython2と3の違いです。あなたの答えに感謝します。 –

0

コメント者が述べたとおりです。 python3で:

>>>st = 'Hello Stack!' 
>>>type(st) 
<class 'str'> 

しかしpython2で:

>>>st = 'Hello Stack!' 
>>>type(st) 
<type 'str'> 

だから、あなたが見ている動作が完全に期待されています。文字列をループすると、文字列のforループは文字列ごとに文字列を繰り返し処理します。文字列の各行を繰り返し処理する場合は、通常、\nのsplitやURLレスポンスの行区切り文字で分割するような正規表現を作成します。以下は、リストの単純なforループです。split

response = urllib.request.urlopen(req).read().decode() 
lines = response.split('\n') 
for x in lines: 
    st = x.strip() 
    # do some processing on st 
+0

ありがとう、私の問題を完全に解決しました。 –

関連する問題