我有一个非常大的 csv 文件(接近 TB),我想根据每一行中的信息将其拆分为更小的 csv 文件。
由于无法在内存中执行此操作,因此我打算采用的方法是读取每一行,决定应将其放入哪个文件,然后将其追加到那里。然而,这需要很长时间,因为打开和关闭时间太长。
我的第二种方法是让所有文件(大约 3000 个)保持打开状态 - 但是这不起作用,因为我不能同时打开那么多文件。
按要求提供的其他详细信息:.csv 文件包含我需要按区域访问的 map 数据。因此,我计划将其聚类到覆盖不同边界框的文件中。由于它是未排序的数据,我必须处理每行的纬度/经度,为其分配正确的文件,并将该行附加到文件。
什么是可行的(快速的,理想的)方法?
最佳答案
这可能有点 hacky 方法,但它需要 pandas
并进行一些批量追加。这将解决在每行处理期间必须打开和关闭文件的问题。我将假设您将行分类到 CSV 的方式是基于大型 CSV 中某列的某些值。
import pandas as pd
import os
df_chunked = pd.read_csv("myLarge.csv", chunksize=30000) # you can alter the chunksize
for chunk in df_chunked:
uniques = chunk['col'].unique().tolist()
for val in uniques:
df_to_write = chunk[chunk['col'] == val]
if os.path.isfile('small_{}.csv'.format(val)): # check if file already exists
df_to_write.to_csv('small_{}.csv'.format(val), mode='a', index=False, header=False)
else:
df_to_write.to_csv('small_{}.csv'.format(val), index=False)
关于python - 在 Python 中将非常大的文件拆分成较小的文件 - 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50062474/