从 Arduino 将新数据写入 Python 中的 csv 文件
Posted
技术标签:
【中文标题】从 Arduino 将新数据写入 Python 中的 csv 文件【英文标题】:Write new data in to csv file in Python from an Arduino 【发布时间】:2021-09-26 05:00:54 【问题描述】:我每秒都从 Arduino 接收数据,但我无法保存它,它将连续数据写入 csv 文件的同一单元格中,并且每次获取新值时都会对其进行更改。 我正在尝试使用 newline='' 和 write 行,但不起作用。
valueenc = (value)
print("Valueencoded", valueenc)
#print("Message received: " + valueenc)
f = open(f'root_path/Desktop/microphone_dump.csv','w+', newline ='')
#f.write(valueenc)
with f:
write = csv.writer(f)
write.writerows(valueenc)
【问题讨论】:
可能只打开一次文件 - 在开始时 - 不要关闭它。 O 可能使用模式a
进行追加。我没有使用工作方式模式w+
,但模式w
会删除以前的内容。
valueenc
中有什么? writerows
需要像 [ [ "row1-col1" , "row1-col2"], [ "row2-col1" , "row2-col2"] ]
那样带有行的列表(也是列表)。
【参考方案1】:
问题可以使模式w+
(打开文件时删除所有数据)和with f:
关闭文件。
我看到了两种可能的解决方案:
首先:只打开一次文件 - 在开始时 - 只在最后关闭一次。
# at start
f = open(f'root_path/Desktop/microphone_dump.csv', 'w+')
# ... code ...
valueenc = value
print("Valueencoded", valueenc)
write = csv.writer(f)
write.writerows(valueenc)
# ... code ...
# at the end
f.close()
但程序出错时可能会丢失数据。
第二种:使用模式a
追加数据
# ... code ...
valueenc = value
print("Valueencoded", valueenc)
with open(f'root_path/Desktop/microphone_dump.csv', 'a') as f:
write = csv.writer(f)
write.writerows(valueenc)
# ... code ...
而且你可以在写入后直接使用with
关闭文件。
编辑:
如果你只想写一行有两个值,那么你应该使用writerow
,名称中不带字符s
。
with open(f'root_path/Desktop/microphone_dump.csv', 'a') as f:
write = csv.writer(f)
write.writerow( [value1, value2] ) # without `s` in name `writerow`
如果你有很多行,那么你可以使用writerows
rows = [
[value1, value2], # row 1
[value3, value4], # row 2
]
with open(f'root_path/Desktop/microphone_dump.csv', 'a') as f:
write = csv.writer(f)
write.writerows( rows ) # with `s` in name `writerows`
顺便说一句:
即使对于行中的单个值,您也必须使用列表
write.writerow( [value1] ) # without `s` in name
和
rows = [
[value1], # row 1
[value2], # row 2
]
write.writerows( rows ) # with `s` in name `writerows`
【讨论】:
现在我有 value1 和 value 2,我想添加不同的单元格,但我正在尝试使用此代码行:file.write(value1, value2 + "\\n") #write data with a newline
但它不起作用。帮助
如果你只有一行,那么你需要write.writerow( [value1, value2] )
。它必须是writerow
,名称中没有字符s
。而标准的write
只需要一个参数——一个字符串——text = str(value1) + "," + str(value2) + "\n"
和后来的file.write( text )
。但是为此使用模块csv
更安全。
我添加了关于写入多行和在行中写入单个元素的信息【参考方案2】:
就是这样:
file = open(f'root_path/Desktop/test.csv', "a")
print("Created file")
file = open(f'root_path/Desktop/test.csv', "a") #append the data to the file
file.write(valueenc + "\n") #write data with a newline
#close out the file
file.close()
【讨论】:
以上是关于从 Arduino 将新数据写入 Python 中的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何通过usb端口通信从arduino将串行数据写入phpmyadmin