我是python的新手。我对<class 'str'>
感到困惑。
我使用了一个str:
response = urllib.request.urlopen(req).read().decode()
“回复”的类型为<class 'str'>
,而不是<type 'str'>
。
当我试图在'for loop'中操纵这个str:
for ID in response:
“响应”不是按行读取,而是按字符读取。
我打算将每一行“响应”放入列表的单个元素中。现在我必须在一个文件中编写响应并使用'open'来获取一个<type 'str'>
字符串,我可以在'for循环'中使用它。
答案 0 :(得分:11)
没有区别。 Python在python 2(Types are written like this: <type 'int'>
.)和python 3(Types are written like this: <class 'int'>
.)之间更改了type
个对象的文本表示。在python 2和3中,类型对象的类型是,嗯,键入:
python 2
>>> type(type('a'))
<type 'type'>
python 3
>>> type(type('a'))
<class 'type'>
这就是改变的原因......字符串表示清楚表明类型是一个类。
至于你的其余问题,
for ID in response:
response
是一个字符串,枚举它会给出字符串中的字符。根据您可能想要使用的响应类型以及HTML,JSON或其他解析器将其转换为python对象。
答案 1 :(得分:5)
评论者提到。在python3中:
>>>st = 'Hello Stack!'
>>>type(st)
<class 'str'>
但是在python2中:
>>>st = 'Hello Stack!'
>>>type(st)
<type 'str'>
所以你所看到的行为是完全可以预期的。对于循环遍历字符串,字符串上的for循环将逐字符遍历字符串。如果要迭代字符串中的每一行,通常会执行类似于\n
上的拆分或一些设计用于拆分URL响应中的行分隔符的正则表达式。以下是split
response = urllib.request.urlopen(req).read().decode()
lines = response.split('\n')
for x in lines:
st = x.strip()
# do some processing on st