40GB中的行数焦油gz文件而不解压缩?

2024-09-30 06:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有超过40GB焦油gz文件位于https://ghtstorage.blob.core.windows.net/downloads/mysql-2016-06-16.tar.gz 我如何在CSV文件中找到压缩在这个文件中的行数焦油gz文件而不解压缩整个文件,这可能是100+千兆字节?在


Tags: 文件csvhttpscorenet字节windowsdownloads
2条回答

without uncompressing the entire file which might be in 100+ GBs

我的意思是不先提取磁盘。下面是一个Python方法来实现这一点:

import tarfile as tf
import gzip as gz
from StringIO import StringIO
infile = '/path/to/mysql-2016-06-16.tar.gz'
def linecount(infile, member):
    lc = 0
    with gz.GzipFile(infile) as zipf:
        with tf.TarFile(fileobj=zipf) as tarf:
            dataf = tarf.extractfile(member)
            while dataf.readline():
               lc += 1 
            dataf.close()       
    return lc
print linecount(infile, 'test.csv')

it say's "filename 'test.csv' not found".

要知道tar文件有哪些成员:

^{pr2}$

要计算tarfile中所有文件的行数:

for member in listmembers(infile):
    print member, linecount(infile, member)

在开始之前,know how tar files are structured将很有用。在

如果其中只有一个csv文件焦油gz,您可以将此作为bash one liner:

tar -zxOf mysql-2016-06-16.tar.gz | wc -l

它使用tar将归档文件中的所有文件提取为标准输出(-O,大写O,而不是零),并使用wc来计算行数。在

如果有更多的文件,并且只需要一个文件,可以按如下方式计算该文件中的行数:

tar -zxOf mysql-2016-06-16.tar.gz mysql-2016-06-16/commit_comments.csv| wc -l

以下是如何列出存档中的所有文件:

tar -zlf mysql-2016-06-16.tar.gz

CSV文件通常有一个头文件,因此每个文件删除一行,您就有了行数。在

相关问题 更多 >

    热门问题