如何计算csv.writer写的行数?

时间:2019-04-17 14:57:10

标签: python csv

我正在尝试跟踪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)来始终跟踪文件内容?

1 个答案:

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