gpt4 book ai didi

带有 TextIOWrapper 的 python zipfile 模块

转载 作者:太空狗 更新时间:2023-10-30 03:06:37 27 4
gpt4 key购买 nike

我编写了以下代码来读取压缩目录中的文本文件。因为我不想要以字节为单位的输出,所以我添加了 TextIOWrapper 以将输出显示为字符串。假设这是逐行读取 zip 文件的正确方法(如果不让我知道),那么为什么输出会打印一个空行?有什么办法可以摆脱它吗?

import zipfile
import io

def test():
zf = zipfile.ZipFile(r'C:\Users\test\Desktop\zip1.zip')
for filename in zf.namelist():
words = io.TextIOWrapper(zf.open(filename, 'r'))
for line in words:
print (line)
zf.close()

test()

>>>
This is a test line...

This is a test line...
>>>

The two lines in the file inside of the zipped folder are:
This is a test line...
This is a test line...

谢谢!

最佳答案

zipfile.open 以二进制模式打开压缩文件,这不会去掉回车符(即“\r”),TextIOWrapper 的默认值也不会> 在我的测试中。尝试配置 TextIOWrapper 以使用通用换行符(即 newline=None):

import zipfile
import io

zf = zipfile.ZipFile('data/test_zip.zip')
for filename in zf.namelist():
with zf.open(filename, 'r') as f:
words = io.TextIOWrapper(f, newline=None)
for line in words:
print(repr(line))

输出:

'This is a test line...\n'
'This is a test line...'

在 Python 中逐行迭代文件时的正常行为是在末尾保留换行符。 print 函数还添加了一个换行符,因此您将得到一个空行。要仅打印文件,您可以改用 print(words.read())。或者您可以使用打印函数的 end 选项:print(line, end='')

关于带有 TextIOWrapper 的 python zipfile 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com