【问题标题】:Script will not write multiple lines in csv脚本不会在 csv 中写入多行
【发布时间】:2018-07-25 15:13:46
【问题描述】:

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

【问题讨论】:

    标签: python csv for-loop nested-loops


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-05-06
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2012-06-23
      • 2016-07-15
      相关资源
      最近更新 更多