Как написать файл CSV, объединяющий 2 другие строки CSV (Python) - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь проанализировать некоторые данные, и для этого я создаю новый файл CSV, записав несколько строк, которые составлены из других файлов CSV. Я извлек данные из одного из файлов (oldfile1), поэтому это список (с конкретными индексами, которые я использую для добавления в новый файл), но другой (oldfile2), который я использую для базы файла, так что я могу напрямую добавить строки из этого файла, так как они не нуждаются в фильтрации. Формула для новой строки должна быть row from oldfile2 + row from oldfile1. first намерен пропустить строку комментария. Тем не менее, этот код в настоящее время создает очень большой выходной файл (200 МБ) - я подозреваю, что он циклически повторяется несколько раз в строке, дублируя записанные строки. Тем не менее, я не могу сразу думать о другом способе обеспечения того, чтобы строки из oldfile2 проходили циклически, не дублируя записанные строки. Я также не могу дать более подробную информацию о выходном файле, так как он вылетает всякий раз, когда я пытаюсь открыть его. Любая помощь приветствуется.

with open('newfile.csv','w+') as f:
        reader = csv.reader(open('oldfile2.csv'), delimiter=',')
        writer = csv.writer(f, delimiter=',')
        first = next(reader)
        for oldrow2 in reader:
                outline = [oldrow2 + oldfile1[i] for i in oldfile1_indices]
                writer.writerow(outline)```


1 Ответ

1 голос
/ 18 апреля 2019

Я не могу проверить это, но я думаю, вам нужно zip(), чтобы создать пары (oldrow2, i), а затем создать новую строку и сохранить ее

oldfile1 = list(csv.reader(open('oldfile1.csv'), delimiter=','))
oldfile1_indices = [...]

with open('newfile.csv','w+') as f:
    writer = csv.writer(f, delimiter=',')

    reader2 = csv.reader(open('oldfile2.csv'), delimiter=',')
    next(reader2)

    for oldrow2, i in zip(reader2, oldfile1_indices):
        outline = [oldrow2 + oldfile1[i]]
        writer.writerow(outline)
...