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

如何使用Python以最佳方式处理超过5000万行的文本文件的每一行?,python,python-3.x,file,Python,Python 3.x,File,我有一个文件,其中有超过5000万行。每行以特定的双字符代码开始。示例文件行为: AB1357 0000-9999 XFAB… AB1358 0000-9999 XABC… BC3233 1322-8638 SCDR… 正如您所看到的,每行的前两个字符是一个代码。我必须根据行中的“代码”对每行应用一些处理。现在我正在逐行处理文件,这需要很多时间。我有什么办法可以优化它吗?我正在使用Python。 注意:我已经有了所有可能的60个代码的列表。针对此类问题的一个典型工作流是使用blaze frame

我有一个文件,其中有超过5000万行。每行以特定的双字符代码开始。示例文件行为:
AB1357 0000-9999 XFAB…
AB1358 0000-9999 XABC…
BC3233 1322-8638 SCDR…
正如您所看到的,每行的前两个字符是一个代码。我必须根据行中的“代码”对每行应用一些处理。现在我正在逐行处理文件,这需要很多时间。我有什么办法可以优化它吗?我正在使用Python。

注意:我已经有了所有可能的60个代码的列表。

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

这假设每个片都可以放入内存中

如果输入文件为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)

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

  • 学生们也会阅读被接受答案的评论
您可能会受到硬件的限制

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

这家伙,亚伦

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

点击谷歌按钮。所有这些都是对原作者的信任


学生23

因为你显然想处理每一行,我不确定你的问题意图是什么。你需要处理每一条线才能处理每一条线你的线大小都一样吗?无论如何,如果你需要所有的信息,你必须完整地阅读文件…因为我在处理后将所有相同的代码行写入一个特定的文件,我想知道是否有任何方法可以将具有相同代码的行分组并立即处理?行大小取决于代码,我需要行中的所有信息这可能是一个X-Y问题。听起来代码很慢,而不是读取文件。