如何使用 `.split()` 从大型 `gzip` 文件中导入制表符分隔的文本?块?

How to use `.split()` for importing tab-delimited text from a large `gzip` file? Chunks?

我有巨大的 gzip 制表符分隔文本文件(几 GB),我想将其解析为 pandas 数据框。

如果此文件的内容是文本,则只需使用 .split(),例如

file_text = """abc   123   cat   456   dog   678   bird   111   fish   ...
moon   1969    revolution    1789   war   1927   reformation    1517    maxwell   ..."""

data = [line.split() for line in file_text.split('\n')]

然后您可以使用

将数据放入 pandas 数据帧
import pandas as pd
df = pd.DataFrame(data)

但是,这不是文本文档。它是一个以制表符分隔的 gzip 文件,包含几 GB 的数据。使用 .split() 将此数据解析为数据帧的最有效方法是什么?

我想第一步是使用

import gzip
with gzip.open(filename, 'r') as f:
    file_content = f.read()

并在 file_content 上使用 .split(),但将所有 GB 保存到单个变量然后拆分会效率低下。是否可以在 "chunks" 中执行此操作?

read_csv() 支持 GZIPped 文件,因此您可以简单地执行以下操作:

for chunk in pd.read_csv('/path/to/file.csv.gz', sep='\s*', chunksize=10**5):
    # process chunk DF

如果你确定你有一个 TSV(TAB 分隔文件),你可以使用 sep='\t'