Не удается открыть файл в подкаталоге с помощью ZipFile - PullRequest
2 голосов
/ 08 апреля 2020

По какой-то причине я не могу открыть или получить доступ к файлу в этом подкаталоге. Мне нужно иметь возможность открывать и читать файлы в подкаталогах ZIP-папки. Вот мой код.

import zipfile
import os

for root, dirs, files in os.walk('Z:\\STAR'):
    for name in files:
        if '.zip' in name:
            try:
                zipt=zipfile.ZipFile(os.path.join(root,name),'r')
                dirlist=zipfile.ZipFile.namelist(zipt)
                for item in dirlist:
                    if 'Usb' in item:
                        input(item)
                        with zipt.open(item,'r') as f:
                            a=f.readlines()
                            input(a[0])
                    else:pass
            except Exception as e:
                print('passed trc file {}{} because of {}'.format(root,name,e))
        else:pass

Этот код в настоящее время дает мне ошибку:

File "StarMe_tracer2.py", line 133, in tracer
    if 'er99' in line:
TypeError: a bytes-like object is required, not 'str'

1 Ответ

2 голосов
/ 08 апреля 2020

Содержимое, считываемое из файлового объекта, открытого с ZipFile.open, является байтами, а не строкой, поэтому проверка, если строка 'er99' находится в строке байтов, завершится ошибкой с TypeError.

Вместо этого вы можете либо декодировать строку перед тестированием:

if 'er99' in line.decode():

, либо преобразовать поток байтов в текстовый поток с помощью io.TextIOWrapper:

import io

...

with io.TextIOWrapper(zipt.open(item,'r'), encoding='utf-8') as f:
...