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)
代码细节解释
- 文件存在性检查:第一次运行时自动创建文件并写入表头,后续运行直接追加数据,保证CSV的结构完整性
with语句:自动管理文件的打开和关闭,不用担心忘记关文件导致的资源泄漏问题- 追加模式
'a':打开文件后,文件指针直接跳到末尾,新数据会被追加到现有内容的下一行,完全不会覆盖之前的记录
这样修改后,每次循环采集到的x、y、z数据就会稳稳地加到CSV的新行里啦!
内容的提问来源于stack exchange,提问作者myk137
相关产品推荐
相关产品推荐

