#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