我正在尝试比较两个csv文件并通过它们搜索以找到特定的值。下面的例子。
文件一
名字,姓氏,年龄
约翰(Doe),45岁
珍妮(Doe),34岁
罗伯特·斯密特,27岁
鲍勃,怀特,56
卡里,伍兹,28
文件二
名
罗伯特
简
脚本应使用File Two的FirstName列在File One的FirstName列中进行搜索并返回年龄
结果罗伯特,27珍妮,34
我的代码仅输出Robert,27,它不会继续搜索Jane的第二行。我尝试使用While循环没有成功。任何帮助将不胜感激!谢谢!
仅供参考,我将通过一个超过1万行的文件搜索50多个项目。
下面的代码:
import csv
FileOne = open('/FileOne')
FileOneReader = csv.DictReader(FileOne)
FileTwo = open('/FileTwo')
FileTwoReader = csv.DictReader(FileTwo)
for row in FileTwoReader:
for row2 in FileOneReader:
if row['FirstName'].lower() in row2['FirstName'].lower():
print 'Name:' + row['FirstName'] + ' Age: ' + row2['Age'].lower()
第二个不打印的原因是因为您正在第一次迭代中读取整个csv.DictReader
对象(是iterator
)。在第二次迭代中,您的一个iterators
已经用尽,因此不会返回任何内容。
您应该将数据保存在列表中,然后以这种方式进行检查。这是一个指南:
# Use with statements whenever you're working with more than one file
with open('full_names.csv') as fileone, open('first_names.csv') as filetwo:
full_table = list(csv.DictReader(fileone))
small_table = list(csv.DictReader(filetwo))
for row1 in full_table:
for row2 in small_table:
if row2['FirstName'].lower() == row1['FirstName'].lower():
print('Name: ' + row2['FirstName'] + ', Age: '+ row1['Age'].lower())
这应该产生:
# Name: Jane, Age: 34
# Name: Robert, Age: 27
full_names.csv包含:
FirstName,LastName,Age
John,Doe,45
Jane,Doe,34
Robert,Smite,27
Bob,White,56
Cary,Woods,28
first_names.csv包含:
FirstName
Robert
Jane
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句