【问题标题】:I have a list of bytes and I want a list of strings我有一个字节列表,我想要一个字符串列表
【发布时间】:2019-08-11 20:27:10
【问题描述】:

我想从一个 url 打开文件的第一行,搜索一个特定的字符串,然后拆分该字符串。

    request=urllib.request.Request(url)
    response=urllib.request.urlopen(request)
    input_file=response.readlines()
    for l in input_file:
        if "target" in l:
           dum, stat = l.split(":")
           stat = stat.strip()

我希望得到一个 stat="StationX" 相反,我得到了

TypeError: 需要一个类似字节的对象,而不是 'str'

因为 input_file 是类型字节而不是类型字符串的列表。 我不知道如何将 input_file 作为字符串引入(我认为这就是 readlines() vs read() 所做的?)或将类型字节列表转换为类型字符串列表。

【问题讨论】:

  • PyPI 中的 requests 包在这里可能会很有帮助。

标签: python-3.x readlines


【解决方案1】:

urllib.request 包有一些细微差别,如下所示。人们可能期望.read() 的返回类型是一个字符串,但它实际上是您必须解码的原始字节。

>>> import urllib.request
>>> req = urllib.request.Request("http://www.voidspace.org.uk")
>>> res = urllib.request.urlopen(req)
>>> raw_contents = res.read()
>>> type(raw_contents)
<class 'bytes'>
>>> page = raw_contents.decode()
>>> type(page)
<class 'str'>

现在是你的情况

request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
raw_lines = response.readlines()
for raw_line raw_lines:
    line = raw_line.decode()
    if "target" in line:
       dum, stat = l.split(":")
       stat = stat.strip()

或者,

for line in map(lambda x: x.decode(), raw_lines):
    # etc

【讨论】:

  • 这使得文件中每个字符的字符串不是文件中每一行的字符串。
猜你喜欢
  • 2021-01-31
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 2022-01-17
  • 2018-09-18
  • 2020-08-25
相关资源
最近更新 更多