从 Arduino 将新数据写入 Python 中的 csv 文件
Write new data in to csv file in Python from an Arduino
我每秒都从 Arduino 接收数据,但我无法保存它,它将连续数据写入 csv 文件的同一单元格中,并且每次获取新值时都会更改它。
我正在尝试使用 newline='' 和写入行,但没有用。
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)
方法是这样的:
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()
问题可以使模式 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`
我每秒都从 Arduino 接收数据,但我无法保存它,它将连续数据写入 csv 文件的同一单元格中,并且每次获取新值时都会更改它。 我正在尝试使用 newline='' 和写入行,但没有用。
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)
方法是这样的:
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()
问题可以使模式 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`