web-dev-qa-db-ja.com

<class 'str'>と<type 'str'>の違いは何ですか

私はpythonが初めてです。 <class 'str'>に混乱しています。私は使用してstrを得ました:

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

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

for ID in response: 

「応答」は行ごとではなく、文字ごとに読み取られます。リストの個々の要素に「応答」のすべての行を入れるつもりです。ここで、応答をファイルに書き込み、「open」を使用して「forループ」で使用できる<type 'str'>の文字列を取得する必要があります。

8
dom free

コメント者が述べたように。 python3の場合:

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

しかし、python2では:

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

したがって、あなたが見ている振る舞いは完全に期待されています。文字列のループに関しては、文字列のforループは文字列を文字ごとに繰り返します。文字列の各行を繰り返し処理する場合、通常は\nまたはURL応答の行区切り文字で分割するように設計された正規表現。以下は、splitから生じるリストの単純なforループです。

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

違いはありません。 Python typeオブジェクトのテキスト表現をpython 2の間で変更しました( タイプは次のように記述されます:<type 'int'> )およびpython 3( タイプは次のように記述されます:<class 'int'> )。 python 2と3の両方で、タイプオブジェクトのタイプは、um、type:

python 2

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

python 3

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

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

問題の残りについては、

for ID in response:

responseは文字列であり、列挙すると文字列内の文字が得られます。使用する応答のタイプと、HTML、JSON、またはその他のパーサーを使用して、pythonオブジェクトに変換します。

12
tdelaney