【发布时间】: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()或类似的东西