用python合并2个csv文件

2024-04-29 05:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个csv文件,如下所示:

文件1.csv:

Name, Email
Jon, jon@email.com
Roberto, roberto@email.com
Mona, mona@email.com
James, james@email.com

文件2.csv:

^{pr2}$

我想要的是File1.csv而不是File2.csv,iex File3.csv(输出)应该如下所示:

文件3.csv:

Name, Email
Jon, jon@email.com
Roberto, roberto@email.com

用Python编写代码的最简单方法是什么?在


Tags: 文件csvnamecomemailrobertojonjames
3条回答
dont_need_em = []
with open("file2.csv", 'r') as fn:
    for line in fn:
        if not line.startswith("Email"):
            dont_need_em.append(line.rstrip())

fw = open("file3.csv", 'w')

with open("file1.csv", 'r') as fn:
    for line in fn:
        if line.rstrip().split(", ")[1] not in dont_need_em: 
            fw.write(line.rstrip())
fw.close()

这应该可以做到,但我相信有更简单的解决办法

编辑:创建第三个文件

下面是一个很好的方法(与上面的方法非常相似,但是将剩余部分写入文件而不是打印:

Removed = []
with open("file2.csv", 'r') as f2:
    for line in f2:
        if not line.startswith("Email"):
           removed.append(line.rstrip())


with open("file1.csv", 'r') as f1:
    with open("file3.csv", 'w') as f3:
        for line in f1:
            if line.rstrip().split(", ")[1] not in removed:
                f3.write(line)

工作原理: 第一个块读取所有你想过滤出来的邮件到一个列表中。接下来,第二个块打开原始文件并设置一个新文件来写入剩下的内容。它读取第一个文件中的每一行,并将它们写入第三个文件,前提是电子邮件不在要过滤的列表中

使用熊猫可以做到:

import pandas as pd
#Read two files into data frame using column names from first row
file1=pd.read_csv('File1.csv',header=0,skipinitialspace=True)
file2=pd.read_csv('File2.csv',header=0,skipinitialspace=True)

#Only return lines in file 1 if the email is not contained in file 2
cleaned=file1[~file1["Email"].isin(file2["Email"])]

#Output file to CSV with original headers
cleaned.to_csv("File3.csv", index=False)

相关问题 更多 >