【问题标题】:csv.writerow appears to be failing to write rowscsv.writerow 似乎无法写入行
【发布时间】: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是准确的

标签: python python-3.x csv export-to-csv disk


【解决方案1】:

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

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

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

例如:

python -u file.py argument

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

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2013-05-13
    • 2014-05-21
    • 1970-01-01
    • 2016-04-09
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多