我有大量 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)
最佳答案
您只需编写一次 header ,因此请在 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
将负责将值放置在正确的标题下。
关于python - 合并多个csv文件与python中不同列的错误与writerow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195393/