脚本不会在csv中写多行

时间:2018-07-25 15:13:46

标签: python csv for-loop nested-loops

我的脚本遍历一个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)

1 个答案:

答案 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)

编辑:

仅需解释一下,在代码中,您首先要初始化两个rdrdat迭代器。然后,您开始循环遍历rdr,对于第一个元素,您开始遍历dat中的所有元素。

完成此操作后,外循环将转到rdr的第二个元素,并再次开始循环到dat,后者现在为空。因此什么也没发生,并且它一直无休止地遍历rdr