Python 基于两列中的特定数据比较两个CSV文件
我被鼓励走出自己的舒适区,在几乎没有经验的情况下使用python,现在我陷入了困境。我正在尝试比较两个CSV文件(fileA.CSV和fileB.CSV),并将任何缺少的用户行从fileB.CSV添加到fileA.CSV。我唯一可以比较的字段是用户的名字和姓氏(在本例中,是每个文件中的第[0]行和第[2]行) 根据我的理解,您无法将信息附加到当前打开的文件中,因此我可以接受建议,而无需创建第三个文件(如果可能)。下面是我的正确路线,但是有很多数据,所以我需要一个循环。请帮忙Python 基于两列中的特定数据比较两个CSV文件,python,csv,Python,Csv,我被鼓励走出自己的舒适区,在几乎没有经验的情况下使用python,现在我陷入了困境。我正在尝试比较两个CSV文件(fileA.CSV和fileB.CSV),并将任何缺少的用户行从fileB.CSV添加到fileA.CSV。我唯一可以比较的字段是用户的名字和姓氏(在本例中,是每个文件中的第[0]行和第[2]行) 根据我的理解,您无法将信息附加到当前打开的文件中,因此我可以接受建议,而无需创建第三个文件(如果可能)。下面是我的正确路线,但是有很多数据,所以我需要一个循环。请帮忙 import csv
import csv
reader1 = csv.reader(open('fileA', 'rb'), delimiter=',', quotechar='|')
row1 = reader1.next()
reader2 = csv.reader(open('fileB', 'rb'), delimiter=',', quotechar='|')
row2 = reader2.next()
##For Loop...
if (row1[0] == row2[0]) and (row1[2] == row2[2]):
## Compare next
else:
## Append entire row to fileA.csv
示例FileA.csv:
John,Thomas,Doe,some,other,stuff
Jane, ,Smith,some,other,stuff
示例FileB.csv:
John, ,Doe,other,personal,data
Jane,Elizabeth,Smith,other,personal,data
Robin,T,Williams,other,personal,data
应该从FileB追加到FileA的唯一一行是Robin的完整行,因此FileA看起来像:
所需结果文件a:
John,Thomas,Doe,some,other,stuff
Jane, ,Smith,some,other,stuff
Robin,T,Williams,other,personal,data
将文件A中的信息首先存储在内存中的集合中 然后,在追加模式下重新打开文件A,并在文件B上循环。然后,可以将集合中未找到的B中的任何名称添加到文件A:
csv_dialect = dict(delimiter=',', quotechar='|')
names = set()
with open('fileA', 'rb') as file_a:
reader1 = csv.reader(file_a, **csv_dialect)
next(reader1)
for row in reader1:
names.add((row[0], row[2]))
# `names` is now a set of all names (taken from columns 0 and 2) found in file A.
with open('fileA', 'ab') as file_a, open('fileB', 'rb') as file_b:
writer = csv.writer(file_a, **csv_dialect)
reader2 = csv.reader(file_b, **csv_dialect)
next(reader2)
for row in reader2:
if (row[0], row[2]) not in names:
# This row was not present in file A, add it.
writer.writerow(row)
与组合的行需要Python 2.7或更高版本。在早期的Python版本中,只需嵌套两条语句:
with open('fileA', 'ab') as file_a:
with open('fileB', 'rb') as file_b:
# etc.
您可以尝试,这可能有助于您更轻松地处理csv文件,并且看起来更具可读性:
import pandas as pd
df1 = pd.read_csv('FileA.csv', header=None)
df2 = pd.read_csv('FileB.csv', header=None)
for i in df2.index:
# Don't append if that row is existed in FileA
if i in df1.index:
if df1.ix[i][0] == df2.ix[i][0] and df1.ix[i][2] == df2.ix[i][2]: continue
df1 = df1.append(df2.ix[i])
df1.to_csv('FileA.csv', index=None, header=None)
这个语法正确吗?文件a,以文件b的形式打开('fileB','rb:@justin:它在Python 2.7中。在早期版本中,只需嵌套这两行(因此将它们分隔开,并额外缩进一级)。