在不加载的情况下计算gzip压缩的tsv列

时间:2017-09-22 02:47:14

标签: python

我有一个大的制表符分隔文件已被gzip压缩,我想知道它有多少列。对于小文件,我可以解压缩并读入python,对于大文件,这很慢。有没有办法快速计算列而不将文件加载到python中?

Effeciently counting number of columns of text file几乎完全相同,但由于我的文件被gzipped只是阅读第一行不会起作用。有没有办法让python高效解压缩到足以读取第一行?

2 个答案:

答案 0 :(得分:4)

  

...但是因为我的文件是gzip,所以只读第一行就行不通了。

是的。

import csv
import gzip

with gzip.open('file.tsv.gz', 'rt') as gzf:
    reader = csv.reader(gzf, dialect=csv.excel_tab)
    print(len(next(reader)))

答案 1 :(得分:0)

这可以使用传统的unix命令行工具完成。例如:

$ zcat file.tsv.gz | head -n 1 | tr $'\t' '\n' | wc -l

zcat(或gunzip -c)解压缩并输出到标准输出,而不修改文件。 ' head -n 1'只读一行并输出。 ' tr'命令用新行替换制表符,并且' wc -l'计算行数。因为' head -n 1'退出一行后,这也会终止z​​cat命令。它非常快。如果文件的第一行是标题,只需省略' wc -l'看看标题是什么。