我编写了以下代码来读取压缩目录中的文本文件。因为我不希望输出以字节为单位,所以我添加了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())。或者可以使用print函数的end选项:print(line, end='')

07-27 15:52