Как подсчитать количество строк, написанных csv.writer?

#python #csv

#python #csv

Вопрос:

Я пытаюсь отслеживать количество строк, которые записываются моим csv.writer.

При запуске кода len(list(reader) идентифицируется правильное количество строк, и если under 100 writer продолжает вставлять 2 новые строки, все хорошо, но после первого цикла len(list(reader) всегда будет суммироваться до 0 строк, вызывая бесконечный цикл. Я предположил, что это проблема с памятью, поскольку писатель, похоже, записывает в память и сбрасывает на диск в конце, но очистка файла или воссоздание экземпляра reader не помогает.

 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:

Я не вижу необходимости создавать объект reader в цикле, в котором вы записываете в 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