Слияние очень больших CSV-файлов в Python - PullRequest
0 голосов
/ 26 сентября 2018

В приведенном ниже коде я объединяю все 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 голосов
/ 26 сентября 2018

Если вы не обрабатываете файлы, вам даже не нужны панды.Просто прочитайте файлы построчно и запишите их в новый файл:

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')
0 голосов
/ 26 сентября 2018

Хороший вопрос, сэр!Python поддерживает концепцию «генераторов» для выполнения задач в определенном итераторе, например.Это часто используется в контексте задач разделения, таких как чтение фрагмента файла по фрагменту.В вашем случае вы не только прочитаете файл таким образом, но также прочитаете другой и соедините его с другим (прочитайте до конца первого, затем добавьте следующий шаг за шагом).Посмотрите эти ответы о том, как использовать генератор в этом контексте:

Ленивый метод чтения больших файлов в Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...