我正在尝试跟踪csv.writer正在写入的行数。
运行代码时,len(list(reader)
标识正确的行数,如果under 100
,编写器将继续插入2个新行,这一切都很好,但是在第一个循环len(list(reader)
之后总是加到0行,导致无限循环。我认为这是一个内存问题,因为写入器似乎最后写入了内存并刷新到磁盘,但是刷新文件或重新创建读取器实例并没有帮助。
import csv
import time
row = [('test', 'test2', 'test3', 'test4'), ('testa', 'testb', 'testc', 'testd')]
with open('test.csv', 'r+', newline='') as csv_file:
writer = csv.writer(csv_file)
while True:
# moved reader inside loop to recreate its instance had no effect
reader = csv.reader(csv_file, delimiter=';')
num = len(list(reader))
if num <= 100:
print(num)
writer.writerows(row)
csv_file.flush() # flush() had no effect
time.sleep(1)
else:
print(num)
break
如何获取len(list(reader)
来始终跟踪文件内容?
答案 0 :(得分:0)
我看不到需要在将csv写入的循环中创建reader对象。您可以做的是:
import csv
count = 0
li =[[1,2,3,4,5],[6,7,8,9,10]]
with open('random.csv','w') as file:
writer = csv.writer(file)
for row in li:
csv.writerow(row)
with open('random.csv','r') as file:
reader = csv.reader(file)
global count
for row in reader:
if len(row) != 0:
count += 1