如果你在csv上进行迭代,csv阅读器会被 "用完"。这就是为什么第二个循环没有看到第一行,因为第一个循环已经 "用完 "了。我们可以通过在一个术语列表上做一个简单的读取器来说明这一点。
>>> import csv
>>> test = ["foo", "bar", "baz"]
>>> reader = csv.reader(test)
>>> for row in reader:
... print(row)
['foo']
['bar']
['baz']
>>> for row in reader:
... print(row)
第二次它什么都不打印,因为迭代器已经用完了。如果你的数据集不是太大,你可以通过将行存储在一个列表中来解决这个问题,从而将其存储在内存中。
data = [row for row in readCSV1]
如果文件太大,你将需要制作第二个文件阅读器,并将其送入第二个csv阅读器。
最后的代码变成了。
with open('WeselVorlageRE5Woche.csv') as woche:
with open('weselfund.csv','+a',newline='') as fund:
readCSV1 = [row for row in csv.reader(woche, delimiter=';')]
for row1 in readCSV1:
if row[1]==row1[4]: #find starting time
if row[3]==row1[1]: # find same train
if row[2]=='cancelled': # condition for taking row
zug=row1[6] #copy trainnumber
print(zug)
for row2 in readCSV1:
if row2[6]==zug: #find all trainnumbers
#write data to csv
writer = csv.writer(fund, delimiter=';')
writer.writerow(row2)
与解决方案,将其存储在内存中。如果你想用第二个读卡器来代替,就变成了
with open('WeselVorlageRE5Woche.csv') as woche:
with open('weselfund.csv','+a',newline='') as fund:
readCSV1 = [row for row in csv.reader(woche, delimiter=';')]
for row1 in readCSV1:
if row[1]==row1[4]: #find starting time
if row[3]==row1[1]: # find same train
if row[2]=='cancelled': # condition for taking row
zug=row1[6] #copy trainnumber
print(zug)
with open('WeselVorlageRE5Woche.csv') as woche2:
readCSV2 = csv.reader(woche2, delimiter=';')
for row2 in readCSV2: