python - 如何计算 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)
始终跟踪文件内容?
解决方案
我认为不需要在您写入 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
推荐阅读
- python - python中的系列数据框
- php - symfony 从代码中设置本地语言 - php
- javascript - 当我为 server.js 使用以下代码时,服务器将永远加载
- unit-testing - 监视从 React 功能组件调用的函数
- azure-functions - Azure 函数应用程序 - 使用 Visual Studio 代码仅从本地上传许多函数应用程序中的一个函数
- python - 评估二维数组上的solve_ivp解决方案
- typescript - Vue3 不使用 cli 服务
- python - 如何在每三个数字之间留一个空格?
- spring - 使用 Grails SAML 插件时,如何将 AuthnContextClassRef 元素添加到 AuthnRequest 中?
- ruby-on-rails - 登录后设计不会重定向到根目录