【问题标题】:How to count the number of lines written by csv.writer?如何计算 csv.writer 写入的行数?
【发布时间】:2019-04-17 14:57:09
【问题描述】:

我正在尝试跟踪我的 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) 随时跟踪文件内容?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    我认为不需要在您写入 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 2021-09-08
      • 2014-07-02
      • 2021-08-13
      • 2019-07-08
      • 2011-11-10
      • 1970-01-01
      • 2019-07-17
      相关资源
      最近更新 更多