如何不使用Pandas合并CSV文件

u2nhd7ah  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(229)

我有3个csv文件,我需要合并
所有3个文件的前三列相同,如姓名、年龄、性别,但其他列都不同。
我是新的python。我需要帮助。我可以理解任何代码写。谢谢
我尝试了一些代码,但不起作用

file 1
firstname,secondname,age,address,postcode,height
gdsd,gas,uugd,gusa,uuh,hhuuw
kms,kkoil,jjka,kja,kaja,loj
iiow,uiuw,iue,oijw,uow,oiujw
ujis,oiiw,ywuq,sax,cxv,ywf

file 2
firstname,secondname,age,home-town,spousename,marital_staus
gdsd,gas,uugd,vbs,owu,nsvc
kms,kkoil,jjka,kja,kaja,loj
iiow,uiuw,iue,xxfaf,owuq,pler
ujis,oiiw,ywuq,gfhd,lzac,oqq

   file 3
firstname,secondname,age,drive,educated,
gdsd,gas,uugd,no,yes
kms,kkoil,jjka,no,no
iiow,uiuw,iue,yes,no
ujis,oiiw,ywuq,yes,yes

预期结果

firstname,secondname,age,hometown,spousename,marital_status,adress,post_code,height,drive,educated

注意,firstname,secondname,age在3个表中是相同的
我需要有效的密码

zzlelutf

zzlelutf1#

你可以使用Python中的csv模块来读取和合并CSV文件,而不需要使用panda。下面是一个例子,说明如何合并前三列相同(name、age、sex)而其他列不同的三个CSV文件:

import csv

# list to hold the contents of all csv files
data = []

# read the contents of each csv file
with open("file1.csv", "r") as f1:
    reader = csv.reader(f1)
    data += [row for row in reader]

with open("file2.csv", "r") as f2:
    reader = csv.reader(f2)
    data += [row for row in reader]

with open("file3.csv", "r") as f3:
    reader = csv.reader(f3)
    data += [row for row in reader]

# write the merged contents to a new csv file
with open("merged_file.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(data)

另外,只有当所有的CSV文件具有相同的结构,相同的列和相同的行数时,它才能工作。另外,这个代码不会检查数据是否唯一。

o7jaxewo

o7jaxewo2#

下面是用Python连接具有不同头文件的CSV文件的通用解决方案。
您首先需要做的是读取每个CSV文件的头,以确定“唯一”字段名。
然后,您只需读取每个输入记录,并在将其转换为与新的头(由唯一字段组成)匹配后将其输出。

#!/usr/bin/env python3
import csv

paths = [ 'file1.csv', 'file2.csv', 'file3.csv' ]

fieldnames = set()
for p in paths:
    with open(p,'r') as f:
        reader = csv.reader(f)
        fieldnames.update( next(reader) )

with open('combined.csv', 'w') as o:
    writer = csv.DictWriter(o, fieldnames = fieldnames)
    writer.writeheader()
    for p in paths:
        with open(p,'r') as f:
            reader = csv.DictReader(f)
            writer.writerows( reader )

**备注:**我打开了两次文件,所以它不适用于流输入(例如sys.stdin

相关问题