You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保留CSV首行表头删除后续内容后追加数据时覆盖表头问题

问题原因

  • 硬编码截断长度不可靠:CSV表头的实际字节长度会受字段内容、系统换行符格式(Windows为\r\n占2字节、Linux/macOS为\n占1字节)影响,固定写truncate(45)很容易出现截断长度偏差,要么多删了表头的后半段内容,要么没删干净旧数据,你遇到的表头被覆盖大概率是运行时实际表头长度超过45字节,截断操作直接把表头也删了一部分,后续写入自然就落到了首行位置。
  • 文件指针行为不符合预期:truncate()方法只会修改文件的大小,不会更改当前文件指针的偏移量,加上a+模式的读写指针逻辑存在平台差异,很容易导致写入位置偏移到你预期之外的位置。

调整后代码的注意事项

你修改后的逻辑是直接清空整个文件,再重新写入表头+新数据,这个逻辑是稳定可靠的,唯一需要注意的是代码最后一行的list是Python的内置关键字,你应该替换为你定义的变量List,否则运行时会抛出类型错误。

更简洁的实现方案

你可以直接用w模式打开文件,w模式默认会清空原有文件内容,不需要单独执行truncate(0)操作,代码可以简化为:

import csv
# 建议用有意义的变量名,避免和内置关键字重名
header = ["Date","Time","Vr","Vy","Vb","Ir","Iy","Ib","Er","Ey","Eb","Pr","Py","Pb"]
sensor_data = ["16-09-2021","02:34:07","223","182","183","17","13","18","2046","1514","2179","2610","2047","2931"]

with open('energylog1.csv', 'w', newline='') as csvfile:
    sensor_write = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    sensor_write.writerow(header)
    sensor_write.writerow(sensor_data)

内容的提问来源于stack exchange,提问作者V_J viji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:24:03