我需要将数据写入单行和列,数据来自串口。所以我以前一行一行地读写。 但要求是我需要将数据写入PYTHON的单行下一列。 我需要像这样的文件
1,2,33,43343,4555,344323
以这种方式,所有数据都是单行和多列,而不是一列和多行。
所以这会一行接一行地写入数据。
1
12
2222
3234
1233
131
但我想要 1,12,2222,3234,1233,131 比如每一行和多列。
import serial
import time
import csv
ser = serial.Serial('COM29', 57600)
timeout = time.time() + 60/6 # 5 minutes from now
while True:
test = 0
if test == 5 or time.time() > timeout:
break
ss=ser.readline()
print ss
s=ss.replace("\n","")
with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'ab') as csvfile:
spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n')
spamwriter.writerow([ s ])
csvfile.close()
time.sleep(0.02)
答案 0 :(得分:0)
假设您的串口数据不会溢出主内存堆,以下代码将满足您的需求。
if
答案 1 :(得分:0)
csv
模块写入行 - 每次调用writerow
时,都会写入换行符并启动新行。因此,您无法多次调用它并希望获得列。但是,您可以将数据收集到列表中,然后在完成后写入该列表。 csv
模块对此非常有用。
import serial
import time
import csv
ser = serial.Serial('COM29', 57600)
timeout = time.time() + 60/6 # 5 minutes from now
data = []
for _ in range(5):
data.append(ser.readline().strip())
time.sleep(0.02)
with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'ab') as csvfile:
spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n')
spamwriter.writerow(data)
# csv is overkill here unless the data itself contains commas
# that need to be escaped. You could do this instead.
# csvfile.write(','.join(data) + '\n')
<强>更新强>
在这里提出问题的一个技巧是提供一个简短,可运行的问题示例。这样,每个人都运行相同的东西,你可以谈论每个人可以使用的代码和输出方面的错误。
这是用模拟数据更新的程序。我把公开改为&#34; wb&#34;如果文件在程序运行时已经存在,则删除该文件。运行它,让我知道它的结果与你想要的结果有什么不同。
import csv
import time
filename = 'deleteme.csv'
test_row = '1,2,33,43343,4555,344323'
test_data = test_row.split(',')
data = []
for _ in range(6):
data.append(test_data.pop(0).strip())
time.sleep(0.02)
with open(filename, 'wb') as csvfile:
spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n')
spamwriter.writerow(data)
print repr(open(filename).read())
assert open(filename).read().strip() == test_row, 'got one row'