Python 读取两个文件并根据第一个文件的列筛选第二个文件
我有一个包含关键字的输入文件,还有一个需要根据这些关键字过滤的csv文件 下面是我使用python自动化任务的尝试Python 读取两个文件并根据第一个文件的列筛选第二个文件,python,loops,csv,for-loop,Python,Loops,Csv,For Loop,我有一个包含关键字的输入文件,还有一个需要根据这些关键字过滤的csv文件 下面是我使用python自动化任务的尝试 import csv with open('Input.txt', 'rb') as InputFile: with open('28JUL2017.csv', 'rb') as CM_File: read_Input=csv.reader(InputFile) for row1 in csv.reader(InputFile):
import csv
with open('Input.txt', 'rb') as InputFile:
with open('28JUL2017.csv', 'rb') as CM_File:
read_Input=csv.reader(InputFile)
for row1 in csv.reader(InputFile):
#print row1
read_CM=csv.reader(CM_File)
next(read_CM, None)
for row2 in csv.reader(CM_File):
#print row2
if row1[0] == row2[0] :
Output= row2[0]+","+row2[1]+","+row2[5]+","+row2[6]
print Output
我只从要筛选的文件中获取第一行。尝试了各种各样的事情,但不明白我错在哪里。请在这里为我指出错误
read\u Input
和read\u CM
本质上是迭代器。一旦你在它们上面循环-你就完成了:你不能重复两次。如果您坚持按自己的方式操作,那么每次要开始新循环并“重新读取”CSV文件时,您都必须倒回文件的开头。这里有一个修正:
import csv
with open('file1.csv', 'rb') as InputFile:
with open('file2.csv', 'rb') as CM_File:
read_Input=csv.reader(InputFile)
for row1 in csv.reader(InputFile):
CM_File.seek(0) # rewind to the beginning of the file
read_CM=csv.reader(CM_File)
next(read_CM, None)
for row2 in csv.reader(CM_File):
if row1[0] == row2[0] :
Output= row2[0]+","+row2[1]+","+row2[5]+","+row2[6]
print Output
与此相反,我建议您循环已经读取的行,而不是重新读取文件。另外,不要使用嵌套循环,而是创建一个“关键字”列表,只需检查row2[0]
是否在该列表中:
import csv
with open('file1.csv', 'rb') as InputFile:
with open('file2.csv', 'rb') as CM_File:
read_Input = csv.reader(InputFile) # read file only once
keywords = [rec[0] for rec in read_Input]
read_CM = csv.reader(CM_File) # read file only once
next(read_CM, None) # not sure why you do this? to skip first line?
for row2 in read_CM:
if row2[0] in keywords:
Output = row2[0]+","+row2[1]+","+row2[5]+","+row2[6]
print("Output: {}".format(Output))
要使用
csv.reader
多次读取CM\u文件,您需要倒带(或关闭并重新打开)。一次读取所有关键字并创建一个集合
,然后一次读取CM_文件
,并在读取时检查每一行中是否有任何关键字。如果您多次需要文件中的数据,请将其全部读取到可以多次解析的字符串或列表中。文件对象不像要传递的doobie。您的逻辑应该是:1)读取第一个文件2)关闭第一个文件3)读取第二个文件4)将第一个文件中的数据与第二个文件中的数据进行比较5)对第二个文件执行操作6)关闭第二个文件。进行建议的更改不会产生任何结果。我得到的第一排也不见了。如果我添加一些示例数据会有帮助吗?当然,一些数据肯定会有帮助。同样,预期的结果也不会有任何影响。@user3017186我已经在使用两个测试文件进行测试的基础上编辑了我的答案。这非常有效。我的工作文件有一个标题行。要跳过阅读,请使用next(read_CM,None)谢谢@agn gazer您的帮助