如何使用Python以最佳方式处理具有超过5000万行的文本文件的每一行?

时间:2018-01-22 12:41:49

标签: python python-3.x file

我的文件中有超过5000万行。每行以一些特定的两个字符代码开头。示例文件行是:
AB 1357 0000 -9999 XFAB ...
AB 1358 0000 -9999 XABC ...
BC 3233 1322 -8638 SCDR ...
正如您所看到的,每行的前两个字符是代码。我必须根据他所拥有的“code”对每一行应用一些处理。现在我正在逐行处理文件,这需要花费很多时间。有什么办法可以优化吗?我正在使用Python 注意:我已经列出了所有可能的60个代码。

2 个答案:

答案 0 :(得分:0)

这类问题的一个典型工作流程是使用blaze framework(或dask.dataframe)“延迟加载”文件,然后依次:根据每个代码进行切片,加载内存,执行操作,导出结果。< / p>

这假设每个切片都可以适合内存。

如果您的输入文件是csv格式,您可以执行以下操作:

import dask.dataframe as dd

df = dd.read_csv('InputFile.csv', header=None, names=['Id', 'Col1', 'Col2', 'Col3'])

codes = ['AB', 'AC', 'AD']

for code in codes:
    df_slice = df[df['Id'].str.startswith(code)]

    # bring slice in memory
    df_slice_pandas = df_slice.compute()

    # perform your calculations here

    # export slice + results to file
    df_slice_pandas.to_csv('OutputFile_'+code+'.csv', index=False)

答案 1 :(得分:-1)

首先,我认为您需要一种方法来逐行读取文件,以获得较大的文件大小。我偶然发现了一些类似的帖子

您可能受到硬件的限制。

如果您不需要同时处理所有行,也许您可​​以实现快速字符串模式识别/搜索算法,该算法将找到感兴趣的两个字符代码,因为您有一个列表。

这个家伙,Aaron,bypasses the "reading line by line" part and loads the file into RAM.

您可以尝试创建大文件的块,然后使用pythons多线程库。或者试试python词典。

点击谷歌按钮。一切都归功于原作者。

Student_23