【问题标题】:Iterating through a gzipped object in Python with strings, not bytes [closed]在 Python 中使用字符串而不是字节迭代 gzipped 对象[关闭]
【发布时间】:2019-08-21 20:21:50
【问题描述】:

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

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 包。

谢谢!

【问题讨论】:

  • 二进制文件没有行的概念,因此您的代码不能与 .gz 文件一起使用。
  • 您能否展示一个最小的示例来说明您正在做什么以及所需的输出?目前尚不清楚您在什么条件下接收字节。在第一种情况下,您将文件包装在 TextIOWrapper (提供字符串)中,在第二种情况下,您以文本模式打开(提供字符串)。
  • 对不起,第一个案例是我拙劣的阅读尝试。我将上面的代码编辑为仅使用 gzip.open。我基本上需要一种方法来逐行遍历一个大的 gzip 压缩文件。
  • @CindyAlmighty 试试dopenf = gzip.open() 或类似的东西

标签: python gzip


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 2019-05-31
    • 1970-01-01
    • 2012-01-20
    • 2013-06-05
    • 2017-10-17
    • 2018-01-08
    • 2022-01-13
    相关资源
    最近更新 更多