首页 > 解决方案 > 如何计算 csv.writer 写入的行数?

问题描述

我正在尝试跟踪我的 csv.writer 正在写入的行数。

在运行代码时,len(list(reader)确定正确的行数和 if 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)始终跟踪文件内容?

标签: pythoncsv

解决方案


我认为不需要在您写入 csv 的循环中创建读取器对象。你可以做的是:

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

推荐阅读