在下面的代码中,我合并所有以特定日期开头的csv文件,该日期包含在变量中:file_date。该代码对于小型和中等大小的csv文件非常有效,但是对于非常大的csv文件会崩溃。
path = '/Users/Documents/'+file_date+'*'+'-details.csv'+'*'
allFiles = glob.glob(path)
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
frame = pd.read_csv(file_,index_col=None, header=0)
print frame.shape
list_.append(frame)
df = pd.concat(list_)
print df.shape
df.to_csv('/Users/Documents/'+file_date+'-details.csv',sep=',', index = False)
我可以分块处理每个文件吗?如果是,我该怎么办?
答案 0 :(得分:0)
好问题,先生! Python支持“生成器”的概念,以特定的迭代器(如时尚)执行任务。这通常用于分区任务的上下文中,例如逐块读取文件。在您的情况下,您不仅会以这种方式读取文件,还会读取另一个文件并将其与另一个文件连接(读取到第一个文件的末尾,然后逐步添加下一个文件)。有关如何在这种情况下使用生成器的信息,请参见以下答案:
答案 1 :(得分:0)
如果不处理文件,则甚至不需要熊猫。只需逐行读取文件并将其写入新文件:
with open('outfile.csv', 'w') as outfile:
for i, filename in enumerate(all_files):
with open(filename, 'r') as infile:
for rownum, line in enumerate(infile):
if (i != 0) and (rownum == 0): # Only write header once
continue
outfile.write(line + '\n')