Как объединить два файла в Python - PullRequest
1 голос
/ 09 февраля 2012

У меня есть два CSV-файла с разделителями табуляции (с заголовками), которые мне нужно объединить в python.

Кроме того, в объединенном файле я хочу добавить в конце столбец для идентификации файлов, потому что, хотяимеют один и тот же формат, они имеют разные данные, которые мне нужно разделить позже.Итак, я хочу добавить столбец с именем 'source' в каждой строке вывода, который равен 0 для file1 и 1 для file2.

Я зашел далеко от использования модуля csv, но редактор добавляет дополнительный символ новой строкимежду каждой строкой, которую он пишет, и этот код ничего не пишет из file2.Что я здесь не так делаю?Кроме того, как мне добавить дополнительный столбец 'source' в объекте line ?

import os, csv

path1 = os.path.abspath("../data/file1.txt")
path2 = os.path.abspath("../data/file2.txt")
merged_path = os.path.abspath('../data/output.txt')

# merge the two files for further processing
merged_file = csv.writer(open(merged_path, 'a'), delimiter = '\t')

#file1
fg = csv.reader(open(path1, 'r'), delimiter = '\t')

for line in fg:
    if line[7] != '\N':
        merged_file.writerow(line) 

#file2
bg = csv.reader(open(path2, 'r'), delimiter = '\t')

for line in bg:
    if line[16] != '\N':
        merged_file.writerow(line) 

1 Ответ

2 голосов
/ 09 февраля 2012

Я предпочитаю использовать dictWriter для этого.Кроме того, ваш код не работает, потому что библиотека csv требует открытия файлов в режиме binary.

import os, csv

path1 = os.path.abspath("../data/file1.txt")
path2 = os.path.abspath("../data/file2.txt")
merged_path = os.path.abspath('../data/output.txt')

#file1
fg = csv.DictReader(open(path1, 'rb'), delimiter = '\t')

fieldnames = fg.fieldnames
fieldnames.append('source')
# merge the two files for further processing
merged_file = csv.DictWriter(open(merged_path, 'ab'), delimiter = '\t', fieldnames=fieldnames)
merged_file.writeheader()

for row in fg:
    row['source'] = os.path.basename(path1)
    merged_file.writerow(row)

#file2
bg = csv.DictReader(open(path2, 'rb'), delimiter = '\t')

for row in bg:
    row['source'] = os.path.basename(path1)
    merged_file.writerow(row)
...