csv_name = "source/Test_source_data/WD{0}mm_d{1}mm_rpm{2}.csv".format(wd,Diameter,rpm) with open(csv_name, 'w', newline='') as csvfile: writer = csv.writer(csvfile,quoting=csv.QUOTE_ALL) writer.writerow(['ts', 'dx','dy','motion','iqc','shutter','frame_avg']) while self.is_running: com_input = ser.readall() if com_input: # 如果读取结果非空,则输出 com_input = str(com_input, 'utf-8') print(com_input) writer.writerow(com_input) 这样写csv内的内容与显示在终端的不相同
时间: 2024-01-22 10:02:06 浏览: 71
这个问题通常是因为 `writer.writerow()` 方法需要接收一个可迭代对象,例如列表或元组,而你将字符串作为参数传递给了该方法,导致数据的格式不正确。你可以将读取到的串口数据转换为列表或元组,并将其作为参数传递给 `writer.writerow()` 方法,例如:
```
import csv
csv_name = "source/Test_source_data/WD{0}mm_d{1}mm_rpm{2}.csv".format(wd, Diameter, rpm)
with open(csv_name, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
writer.writerow(['ts', 'dx', 'dy', 'motion', 'iqc', 'shutter', 'frame_avg'])
while self.is_running:
com_input = ser.readall()
if com_input:
com_input = str(com_input, 'utf-8')
data_list = com_input.strip().split(",") # 将字符串转换为列表
print(data_list)
writer.writerow(data_list) # 将列表作为参数传递给 writerow 方法
```
这样可以将读取到的串口数据转换为列表,并将其写入 csv 文件中。
另外,你在读取串口数据时使用了 `readall()` 方法,这个方法会一次性读取所有可用的数据并返回,可能会导致数据过长而无法正确写入 csv 文件。建议使用 `readline()` 方法逐行读取数据,并在每行末尾添加换行符,这样可以避免数据过长的问题。例如:
```
while self.is_running:
com_input = ser.readline()
if com_input:
com_input = str(com_input, 'utf-8')
data_list = com_input.strip().split(",")
print(data_list)
writer.writerow(data_list)
```
这样可以逐行读取串口数据,并在每行末尾添加换行符(由 `readline()` 方法自动添加),避免数据过长的问题。
阅读全文