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

Python实现ADXL345加速度计数据追加写入CSV的问题求助

解决ADXL345数据写入CSV被覆盖的问题

嘿,这个问题我太熟了!你现在遇到的核心问题是文件打开模式用错了——默认的'w'写入模式会直接清空文件原有内容,所以每次循环都会把之前的数据覆盖掉。只要改成追加模式,再优化下代码结构,就能让新数据乖乖写到下一行啦。

关键修改要点

  • 把import csv移到代码最开头,别放在循环里(循环里反复导入模块完全没必要,还拖慢运行效率)
  • 打开文件时用追加模式('a'),同时加上newline=''避免Windows系统下CSV出现多余空行
  • 第一次运行时写入表头(比如x,y,z),让CSV的结构更清晰易读

修改后的完整代码示例

import csv
import os
# 假设你的ADXL345类是从对应模块导入的,根据实际情况调整
from adxl345 import ADXL345

# 定义CSV文件名
csv_file = 'adxl_data.csv'

# 第一次运行时创建文件并写入表头
if not os.path.exists(csv_file):
    with open(csv_file, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['x', 'y', 'z'])

while True:
    adxl345 = ADXL345()
    axes = adxl345.getAxes(True)
    
    # 打印数据(保留你原来的输出逻辑)
    print(f"ADXL345 on address 0x{adxl345.address:x}:")
    print(f" x = {axes['x']:.3f}G")
    print(f" y = {axes['y']:.3f}G")
    print(f" z = {axes['z']:.3f}G")
    
    # 用追加模式打开文件,写入新数据到下一行
    with open(csv_file, 'a', newline='') as f:
        writer = csv.writer(f)
        writer.writerow([axes['x'], axes['y'], axes['z']])
    
    # 可选:加个延时避免数据写入太频繁,比如每秒采集一次
    # import time
    # time.sleep(1)

代码细节解释

  1. 文件存在性检查:第一次运行时自动创建文件并写入表头,后续运行直接追加数据,保证CSV的结构完整性
  2. with语句:自动管理文件的打开和关闭,不用担心忘记关文件导致的资源泄漏问题
  3. 追加模式'a':打开文件后,文件指针直接跳到末尾,新数据会被追加到现有内容的下一行,完全不会覆盖之前的记录

这样修改后,每次循环采集到的x、y、z数据就会稳稳地加到CSV的新行里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:01:46