在Python中合并非常大的csv文件

时间:2018-09-26 19:09:31

标签: python pandas dataframe

在下面的代码中,我合并所有以特定日期开头的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)

我可以分块处理每个文件吗?如果是,我该怎么办?

2 个答案:

答案 0 :(得分:0)

好问题,先生! Python支持“生成器”的概念,以特定的迭代器(如时尚)执行任务。这通常用于分区任务的上下文中,例如逐块读取文件。在您的情况下,您不仅会以这种方式读取文件,还会读取另一个文件并将其与另一个文件连接(读取到第一个文件的末尾,然后逐步添加下一个文件)。有关如何在这种情况下使用生成器的信息,请参见以下答案:

Lazy Method for Reading Big File in 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')