脚本不会在 csv 中写入多行
Script will not write multiple lines in csv
我的脚本遍历一个 csv(模式)的每一行,并将这些值与另一个 csv(数据)的每一行进行比较。当它找到匹配时,它应该将数据文件中的整行写入一个新文件(输出)。截至目前,当我 运行 它时,它只会将第一个匹配项写入输出文件。
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)
您想读取整个 data.csv 文件中的每一行 schema.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
上循环。
我的脚本遍历一个 csv(模式)的每一行,并将这些值与另一个 csv(数据)的每一行进行比较。当它找到匹配时,它应该将数据文件中的整行写入一个新文件(输出)。截至目前,当我 运行 它时,它只会将第一个匹配项写入输出文件。
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)
您想读取整个 data.csv 文件中的每一行 schema.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
上循环。