csv.writerow 似乎无法写入行

Posted

技术标签:

【中文标题】csv.writerow 似乎无法写入行【英文标题】:csv.writerow appears to be failing to write rows 【发布时间】:2021-06-07 09:20:01 【问题描述】:

我有一个脚本可以将近 800,000 行写入各种 CSV 文件。

for col in data:
        with open('output/.csv'.format(col), mode, encoding='utf-8', newline='') as f:
            writer = csv.writer(f, lineterminator = '\n')
            if mode == 'w':
                writer.writerow(headers)
            for row in data[col]:
                writer.writerow(row)

在现代机器上,这似乎可以正常工作并写入所有行。

但是,在较旧的机器上(使用机械硬盘),总共缺少大约 35% 到 40% 的行。

这是机器列表,以及写入的总行数(共 815143 行):

Macbook pro osx 10.15(16gb ram, SSD) - 815143 Windows 10(32gb 内存,NVme)- 815143 Windows 10(4GB 内存,硬盘)- 543737 Windows 10(4GB 内存,硬盘)- 501335

是不是我做错了什么导致了这种情况?

还是要考虑写入失败?当使用csv.write?

【问题讨论】:

如果 Python 没有引发任何异常,那么我建议运行适用于 Windows 10 的任何磁盘检查实用程序。 这不太可能与您的磁盘有关,更有可能是您的会计(您如何计算行数?)或您的输入数据(可能并不总是相同)! @ti7 我正在使用wc -l output/*(这包含所有的csv文件)我认为wc是准确的 【参考方案1】:

这个问题的原因似乎是 Python 的输出缓冲区。

https://blog.finxter.com/what-is-python-output-buffering-and-how-to-disable-it/

在运行 python 时传递 -u 标志似乎可以解决 csv 行未在较慢机器上写入的问题。

例如:

python -u file.py argument

希望这对遇到相同问题的其他人有所帮助。

【讨论】:

以上是关于csv.writerow 似乎无法写入行的主要内容,如果未能解决你的问题,请参考以下文章

SXSSFWorkbook 无法写入数据,文档似乎已经关闭

Qt,QFile 写入特定行

C ++ - 在文本文件上写入时代码无法交替行

Powershell写入第一行但无法将后续行写入for循环中的文件

python怎么样把学生信息管理系统的信息保存到csv中?

使用 gspread 写入 Google 工作表时无法实现批量更新行