2016-05-29 3 views
2

Пример того, что я пытаюсь достичь:Чтение содержимого архива без извлечения

Мой текстовый файл (test1.txt) содержит следующие две строки:

John scored 80 in english 

tim scored 75 in english 

Я сжатый этот файл test1.zip и I пытаюсь прочитать содержимое с помощью следующего кода:

f = 'test1.zip' 
z = zipfile.ZipFile(f, "r") 
zinfo = z.namelist() 
for name in zinfo: 
    with z.open(name) as f1: 
     fi1 = f1.readlines() 
for line in fi1: 
print(line) 

но результат я получаю это

b'John scored 80 in english\r\n' 

b'tim scored 75 in english\r\n' 

Как я могу прочитать содержимое этого архива, который должен дать мне тот же результат, как оригинальный контент файла, который:

John scored 80 in english 

tim scored 75 in english 
+0

Вы получаете исходный вход. – sayan

ответ

3

Вы на самом деле читают то, что именно в этом файле.

Символ/r/n - символ новой строки в окнах. Вопрос Difference between \n and \r? идет более подробно, но дело доходит до того, что Windows использует/r/n в качестве своей новой строки.

Характер, который вы видите, связан с python и как он анализирует файл. Вопрос What does the 'b' character do in front of a string literal? делает хорошую работу, отвечая, почему именно это происходит, но документация цитируемый является:

Bytes литералы всегда с префиксом «B» или «B»; они создают экземпляр типа байтов вместо типа str. Они могут только содержать символы ASCII; байты с числовым значением 128 или выше должны быть выражены с помощью экранов.

EDIT: На самом деле я нашел очень похожий ответ, который вы можете извлечь для чтения без дополнительных символов: py3k: How do you read a file inside a zip file as text, not bytes?. Основная идея заключалась в том, что вы могли бы использовать это:

items_file = io.TextIOWrapper(items_file, encoding='your-encoding', newline='') 
Смежные вопросы