首页 > 解决方案 > 在 Python 中使用字符串而不是字节迭代 gzipped 对象

问题描述

根据文件的扩展名,我使用带有上下文管理器的不同开启器,如下所示:

if args.vcf_in.endswith(".gz"):
    dopenf = gzip.open
    mode = "rb"
else:
    openf = open
    mode = "rt"

不幸的是,当我尝试在一种情况下迭代对象时,它是字节和另一个字符串,并且代码失败:

with openf(args.vcf_in, mode) as fin:
    for line in fin:
        count += 1
        print(line)
        if line.startswith("#"):

有没有办法遍历一个 gzip 文件,以便输出的行是字符串?我知道我可以检查它们是否是字节并对其进行解码,但我很好奇是否有更好的方法使用 opener 或 io 包。

谢谢!

标签: pythongzip

解决方案


也许我在这里误解了一些东西,但是如果您的 gzip 文件是文本文件,您应该能够简单地调用 gzip.open() 并使用 mode='r'(不是 'rb')代替标准的 open()。不需要所有的 io 类。


推荐阅读