如何使用Python以最佳方式处理超过5000万行的文本文件的每一行?
我有一个文件,其中有超过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
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)
首先,我认为您需要一种方法来逐行读取大文件大小的文件。我偶然发现了一些与你类似的帖子:
- 学生们也会阅读被接受答案的评论
- 和
学生23因为你显然想处理每一行,我不确定你的问题意图是什么。你需要处理每一条线才能处理每一条线你的线大小都一样吗?无论如何,如果你需要所有的信息,你必须完整地阅读文件…因为我在处理后将所有相同的代码行写入一个特定的文件,我想知道是否有任何方法可以将具有相同代码的行分组并立即处理?行大小取决于代码,我需要行中的所有信息这可能是一个X-Y问题。听起来代码很慢,而不是读取文件。