保留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
相关产品推荐
相关产品推荐

