如何在Python中合并两个文件

1 投票
1 回答
4570 浏览
提问于 2025-04-17 12:40

我有两个用制表符分隔的csv文件(都有表头),我想在Python中把它们合并在一起。

而且,在合并后的文件中,我想在最后加一列来标识这些文件,因为虽然它们的格式相同,但数据不同,我需要后续区分开来。所以,我想在每一行的输出中加一列,叫做'source',对于文件1,这列的值是0,对于文件2,这列的值是1。

我已经尝试使用csv模块,但writerow在写每一行时会多加一个换行符,而且这段代码没有写入文件2的任何内容。我哪里做错了?另外,我该如何在line对象中添加额外的'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 个回答

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)

撰写回答