如何在python中合并两个文件

时间:2012-02-09 13:42:28

标签: python csv filemerge

我需要在python中合并两个制表符分隔的csv文件(带标题)。

此外,在合并文件中,我想在最后添加一列来识别文件,因为虽然它们具有相同的格式,但它们具有我稍后需要分离的不同数据。 所以,我想在每行输出上添加一个名为'source'的列,对于file1为0,对于file2为1。

我已经使用了csv模块,但是编写器在它写入的每一行之间添加了一个附加的换行符,而且这段代码不会从file2写入任何内容。我在这做错了什么?另外,如何在对象中添加额外列'source'?

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 个答案:

答案 0 :(得分:2)

我更喜欢使用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)