无需提取即可读取zip文件的内容

时间:2016-05-29 04:38:13

标签: python-3.x zip zipfile

我想要实现的目标:

我的文本文件(test1.txt)包含以下两行:

John scored 80 in english

tim scored 75 in english

我已将此文件压缩为test1.zip,我正尝试使用以下代码阅读内容:

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'

如何阅读此zip文件的内容,该文件应提供与原始文件内容相同的输出:

John scored 80 in english

tim scored 75 in english

2 个答案:

答案 0 :(得分:4)

您实际上正在阅读文件中的确切内容。

/ r / n字符是windows中的换行符。这个问题 Difference between \n and \r?更详细一些,但归结为Windows使用/ r / n作为换行符。

b'你看到的角色与python有关,以及它如何解析文件。问题What does the 'b' character do in front of a string literal?很好地回答了为什么会发生这种情况,但所引用的文档是:

  

字节文字总是以' b'为前缀。或者' B&#39 ;;他们生产了一个   字节类型的实例而不是str类型。他们可能只是   包含ASCII字符;数字值为128或更大的字节   必须用逃避来表达。

编辑:我实际上找到了一个非常相似的答案,你可以在没有多余字符的情况下阅读: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='')

答案 1 :(得分:0)

使用此命令:print(line.decode('ascii')。strip())而非print(line)