for file.split('\ r \ n')中的x:TypeError:需要类似字节的对象,而不是'str'

问题描述 投票:0回答:3

我基本上想在列表中搜索关键字,但是我不确定如何修复代码,所以不会出现此错误。

suspicious = []

zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt")
for x in file.split('\r\n'):

    if "apple" in x and "support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.replace('\n', ''))
python pycharm python-3.7
3个回答
0
投票

我尚未测试代码,但可以尝试此操作

suspicious = []

zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt")
for x in file.split(b'\r\n'):

    if "apple" in x and "support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.replace('\n', ''))

0
投票

如果您这样更改,它将起作用:

suspicious = []

zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt")
for x in file.split(b'\r\n'):
    strX = str(x)
    if "apple" in strX and "support" in strX:
        print("suspicious address found"+ strX)
        suspicious.append(strX.replace('\n', ''))

0
投票

zip.read返回一个bytes对象。如果您知道它是文本,则应先将其解码为str对象,然后再进行进一步处理。

zip = zip.read("domain-names.txt").decode()

您可能还想使用io.StringIO,以便将内容视为文件。

import io
import zipfile

zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  io.StringIO(zip.read("domain-names.txt").decode())
for x in file:
    if "apple" in x and "support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.rstrip('\n'))

0
投票

这是因为您正在混合str和字节。的值是字节,因此您不能将其分割为字符串('\ r \ n')。您在这里有2个选择:

  1. 将分割字符转换为字节(b'\ r \ n')。在这种情况下,您还必须更改if条件以使用字节,并将替换的字符替换为字节,因为x也是字节]
  2. 在这种情况下,将文件转换为字符串(如果文件为utf-8,则将文件转换为字符串(file.decode(“ utf-8”));]
  3. 所以简单的改变就是这个

suspicious = []
zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt")
for x in file.decode("utf-8").split('\r\n'):

    if "apple" in x and "support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.replace('\n', ''))

基于字节的方法:

suspicious = []
zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt")
for x in file.split(b'\r\n'):

    if b"apple" in x and b"support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.replace(b'\n', b''))
© www.soinside.com 2019 - 2024. All rights reserved.