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