如何在Python中合并两个文件
我有两个用制表符分隔的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)