在具有写行的python错误中合并具有不同列的多个csv文件

问题描述 投票:0回答:1

我有大量的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)
python csv multiple-columns large-data large-files
1个回答
0
投票

您只需要编写一次标题,因此在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将把值放在正确的标题下。

© www.soinside.com 2019 - 2024. All rights reserved.