Читайте zip-файл в python3 так же, как python2 - PullRequest
0 голосов
/ 12 марта 2019

Я сохраняю код ниже в 1 файле. скажем read_zipfile.py.

with open("demo.zip", "rb") as f:
    read_data = f.read()
    print (read_data) 

Python2 дает вывод ниже:

[harsha@os]$ python2 read_zipfile.py
PK�flNdemo/PK
�flN����demo/hello.txtThi is Hello file
PK
�KK
   demo/hi.txtPK?�flN$��Ademo/
 �m@Q���^;T����m@Q���PK?
�flN����$ ���#demo/hello.txt
 �m@Q����m@Q����m@Q���PK?
�KK
   $ ���ademo/hi.txt
 ���B�������,���PK�

Python3 дает вывод ниже:

[harsha@os]$ python3 read_zipfile.py
    b'PK\x03\x04\x14\x03\x00\x00\x00\x00\x88flN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00demo/PK\x03\x04\n\x03\x00\x00\x00\x00\x88flN\x83\x9d\xd9\xc9\x12\x00\x00\x00\x12\x00\x00\x00\x0e\x00\x00\x00demo/hello.txtThi is Hello file\nPK\x03\x04\n\x03\x00\x00\x00\x00\xf0\x18KK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00demo/hi.txtPK\x01\x02?\x03\x14\x03\x00\x00\x00\x00\x88flN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00$\x00\x00\x00\x00\x00\x00\x00\x10\x80\xedA\x00\x00\x00\x00demo/\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x80m@Q\xa4\xd8\xd4\x01\x00^;T\xa4\xd8\xd4\x01\x80m@Q\xa4\xd8\xd4\x01PK\x01\x02?\x03\n\x03\x00\x00\x00\x00\x88flN\x83\x9d\xd9\xc9\x12\x00\x00\x00\x12\x00\x00\x00\x0e\x00$\x00\x00\x00\x00\x00\x00\x00 \x80\xa4\x81#\x00\x00\x00demo/hello.txt\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x80m@Q\xa4\xd8\xd4\x01\x80m@Q\xa4\xd8\xd4\x01\x80m@Q\xa4\xd8\xd4\x01PK\x01\x02?\x03\n\x03\x00\x00\x00\x00\xf0\x18KK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00$\x00\x00\x00\x00\x00\x00\x00 \x80\xa4\x81a\x00\x00\x00demo/hi.txt\n\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\x00\xb6\x96\xfa\x0fB\xd3\x01\x80\xd0\xd6\x16\xa4\xd8\xd4\x01\x00,\x17\x0f\xa4\xd8\xd4\x01PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\x14\x01\x00\x00\x8a\x00\x00\x00\x00\x00'

Как я могу получить выходной формат python2, используя python3?

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

В python3, f.read () возвращает байты, Вы должны выбрать кодировку, например utf-8, и преобразовать ее в str.

Тогда он будет напечатан как python2.

with open("demo.zip", "rb") as f:
    read_data = f.read()
    #print (read_data) 
    s = read_data.decode('latin1')
    print(s)
0 голосов
/ 12 марта 2019

Чтобы выгрузить необработанные байты в STDOUT в Python 3, используйте двоичный поток, лежащий в основе sys.stdout. Он доступен как атрибут .buffer.

Изменить print(read_data) на

sys.stdout.buffer.write(read_data)
sys.stdout.buffer.write(b'\n')

Последняя строка необходима, если вы хотите точно имитировать то, что делает print.

...