2016-11-30 184 views
0

我通过两个不同的csv文件解析并需要匹配它们之间的列。目前,当我运行代码片段时,实际上在两个csv文件之间存在匹配的地址时,它不返回匹配的值。我遇到的问题是OnlineData csv文件中地址字段的缩写。例如:Python:匹配两个csv文件之间的值

In the Addresses csv        In the OnlineData csv 
    4587 Newton Road         4587 Newton Rd 
    7854 Food Court          7854 Food Ct 

我怎么能告诉Python中寻找匹配的值时查找数字(“4587”)和第一个字(“牛顿”)在两个CSV文件。

import csv 


Addresses = set() 

with open ('Addresses.csv') as f: 
    for row in csv.reader(f): 
     Addresses.add(row[1]) 

OnlineData = set() 

with open ('C:/Users/OnlineData.csv') as g: 
    for row in csv.reader(g): 
     PermitData.add(row[1]) 


results = Addresses & OnlineData 


print 'There are', len(results), 'matching addresses between the two csv files' 

for result in sorted(results): 
    print result 
+0

除了添加完整的“row [1]”值之外,首先在每个循环中截断它,以便在尝试交叉之前丢弃Road,Rd,Court等组件。 – sal

+0

对不起,如果这听起来很荒谬,但是你的意思是使用append? –

+0

我会写一个解决方案。 – sal

回答

1

由于你仅在匹配部分数据感兴趣,则可能也仅仅加载部分插入到所述set,然后执行的交叉点。

import csv 

Addresses = set() 
with open ('Addresses.csv') as f: 
    for row in csv.reader(f): 
     portion = ' '.join(row[1].split()[:-1]) # Loads "4587 Newton" instead of "4587 Newton Road" 
     Addresses.add(portion) 

OnlineData = set() 
with open ('C:/Users/OnlineData.csv') as g: 
    for row in csv.reader(g): 
     portion = ' '.join(row[1].split()[:-1]) 
     OnlineData.add(portion) 

results = Addresses & OnlineData 

print 'There are', len(results), 'matching addresses between the two csv files' 

for result in sorted(results): 
    print result 

明显的缺点是,你失去了那些信息,你仍然可以检索。另一种选择是对输入进行归一化,这意味着您可以用RoadCt替换RdCourt,无论这些出现在哪里,以便始终匹配信息。

相关问题