我有大量的csv文件/数据框,它们太大而无法一起存储在内存中。但是,我注意到这些数据框之间的列大小不同。我的专栏是“ ACGT”(DNA序列)的排列。我按照this question的说明编写了如何使用不同的列编写多个csv,但是出现以下错误:AttributeError:'str'对象没有属性'keys'。我发现this question解决了该错误,但是我不确定在哪里编辑代码以使“行”对象成为字典。我也担心我的csv文件具有一个没有标题值的索引列,这可能会弄乱我的代码,或者我的字段名的格式(从排列派生的str)可能会成为问题。如果有一种方法可以用另一种语言连接多个csv文件,而我却对此进行了修改,但是我遇到了this question as well的问题。
import glob
import csv
import os
mydir = "test_csv/"
file_list = glob.glob(mydir + "/*.csv") # Include slash or it will search in the wrong directory!!
file_list
import itertools
fieldnames = []
for p in itertools.product('ACGT', repeat=8):
fieldnames.append("".join(p))
for filename in file_list:
with open(filename, "r", newline="") as f_in:
reader = csv.reader(f_in)
headers = next(reader)
with open("Outcombined.csv", "w", newline="") as f_out:
writer = csv.DictWriter(f_out, fieldnames=fieldnames)
for filename in file_list:
with open(filename, "r", newline="") as f_in:
reader = csv.DictReader(f_in)
for line in headers:
writer.writerow(line)
您只需要编写一次标题,因此在file_list
循环之前执行此操作:
with open('Outcombined.csv','w',newline='') as f_out:
writer = csv.DictWriter(f_out,fieldnames=fieldnames)
writer.writeheader() # write header based on `fieldnames`
for filename in file_list:
with open(filename,'r',newline='') as f_in:
reader = csv.DictReader(f_in)
for line in reader:
writer.writerow(line)
DictWriter
将把值放在正确的标题下。