我的脚本遍历一个csv(模式)的每一行,并将这些值与另一csv(数据)的每一行进行比较。找到匹配项时,应将数据文件的整个行写入新文件(输出)。到目前为止,当我运行它时,它只会将第一个匹配项写入out文件。
with open("C:/Users/user/Desktop/c/out.csv", "w", newline="") as write:
wtr = csv.writer(write)
with open("C:/Users/user/Desktop/c/schema.csv", "r") as schema:
rdr = csv.reader(schema)
with open("C:/Users/user/Desktop/c/data.csv","r") as data:
dat = csv.reader(data)
for r in rdr:
for d in dat:
if(r[0] == d[16] and r[1] == d[20]):
wtr.writerow(d)
答案 0 :(得分:1)
您要读取schema.csv中每一行的整个data.csv文件,因此需要在open("...") as data
循环内移动for r in rdr:
指令:
with open("C:/Users/user/Desktop/c/out.csv", "w", newline="") as write:
wtr = csv.writer(write)
with open("C:/Users/user/Desktop/c/schema.csv", "r") as schema:
rdr = csv.reader(schema)
for r in rdr:
with open("C:/Users/user/Desktop/c/data.csv","r") as data:
dat = csv.reader(data)
for d in dat:
if(r[0] == d[16] and r[1] == d[20]):
wtr.writerow(d)
编辑:
仅需解释一下,在代码中,您首先要初始化两个rdr
和dat
迭代器。然后,您开始循环遍历rdr
,对于第一个元素,您开始遍历dat
中的所有元素。
完成此操作后,外循环将转到rdr
的第二个元素,并再次开始循环到dat
,后者现在为空。因此什么也没发生,并且它一直无休止地遍历rdr
。