我有一个大约10个CSV文件的数据集。我想将这些文件逐行合并到一个CSV文件中。
我尝试了什么:
import csv
fout = open("claaassA.csv","a")
# first file:
writer = csv.writer(fout)
for line in open("a01.ihr.60.ann.csv"):
print line
writer.writerow(line)
# now the rest:
for num in range(2, 10):
print num
f = open("a0"+str(num)+".ihr.60.ann.csv")
#f.next() # skip the header
for line in f:
print line
writer.writerow(line)
#f.close() # not really needed
fout.close()
答案 0 :(得分:0)
我不完全理解您使用库csv
的原因。实际上,用给定文件中的行填充输出文件就足够了(它们具有相同的列'鬃毛和订单)。
input_path_list = [
"a01.ihr.60.ann.csv",
"a02.ihr.60.ann.csv",
"a03.ihr.60.ann.csv",
"a04.ihr.60.ann.csv",
"a05.ihr.60.ann.csv",
"a06.ihr.60.ann.csv",
"a07.ihr.60.ann.csv",
"a08.ihr.60.ann.csv",
"a09.ihr.60.ann.csv",
]
output_path = "claaassA.csv"
with open(output_path, "w") as fout:
header_written = False
for intput_path in input_path_list:
with open(intput_path) as fin:
header = fin.next()
# it adds the header at the beginning and skips other headers
if not header_written:
fout.write(header)
header_written = True
# it adds all rows
for line in fin:
fout.write(line)
答案 1 :(得分:0)
明确需要问题中的更多细节(理想情况下输入和预期输出的示例)。
鉴于提供的信息很少,我将假设您知道所有文件都是有效的CSV,并且它们都具有相同的数字或行(行)。我还假设记忆不是一个问题(即它们是"小的"文件在内存中组合在一起)。此外,我假设行结尾是新行(\n
)。
如果所有这些假设都有效,那么你可以这样做:
input_files = ['file1.csv', 'file2.csv', 'file3.csv']
output_file = 'output.csv'
output = None
for infile in input_files:
with open(infile, 'r') as fh:
if output:
for i, l in enumerate(fh.readlines()):
output[i] = "{},{}".format(output[i].rstrip('\n'), l)
else:
output = fh.readlines()
with open(output_file, 'w') as fh:
for line in output:
fh.write(line)
可能有更有效的方法,但这是实现我认为你要求的快速而肮脏的方式。
前面的回答隐含地假设我们需要在python中执行此操作。如果bash是一个选项,那么您可以使用paste
命令。例如:
paste -d, file1.csv file2.csv file3.csv > output.csv