для x в file.split ('\ r \ n'): TypeError: требуется объект, похожий на байты, а не 'str' - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу в основном искать ключевые слова в списке, но я не уверен, как исправить свой код, чтобы я не получил эту ошибку.

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', ''))

Ответы [ 5 ]

1 голос
/ 23 апреля 2020

Это потому, что вы смешиваете str с байтами. Значение файла в байтах, поэтому вы не можете разделить его на строку ('\ r \ n'). У вас есть 2 варианта:

  1. Преобразовать символ разделения в байт (b '\ r \ n'). В этом случае вы также должны изменить свое условие if, чтобы использовать байты, а также заменить символы, которые у вас есть, вместо байта, поскольку x также является байтами
  2. преобразовать файл в строку (file.decode ("utf- 8 ") если ваш файл - utf-8) в этом случае ваш код должен работать без каких-либо изменений

Таким образом, простое изменение будет следующим (второй подход)

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''))
0 голосов
/ 23 апреля 2020

Вы должны .decode () файловый объект перед "для" l oop. Код Corect ниже.

suspicious = []

zip = zipfile.ZipFile("C:/Users/Kamil/urls.zip")
file =  zip.read("domain-names.txt")
file = file.decode()
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', ''))

0 голосов
/ 23 апреля 2020

Если вы измените его так, оно будет работать:

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 голосов
/ 23 апреля 2020

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(), newline=None)
for x in file:
    if "apple" in x and "support" in x:
        print("suspicious address found"+ x)
        suspicious.append(x.rstrip('\n'))
0 голосов
/ 23 апреля 2020

Функция чтения в Zipfile возвращает байты.

Таким образом, декодирование байтов в формате utf-8, который является самым безопасным кодером, который вы можете использовать для текстового файла, если вы не знаете точную кодировку

suspicious = []

zip = zipfile.ZipFile("C:/Users/Oliver/Documents/website_urls/urls.zip")
file =  zip.read("domain-names.txt").decode('utf-8')
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', ''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...