[英]Separating values from list and write into csv file
我有以下代碼,我想用它們分隔date:07/12/13
並將其寫入csv文件。 但是,我無法從列表中分離元素。 我已經在.py腳本上測試了列表組件,效果很好,但是當我運行腳本時,它給出了錯誤。
def main():
pass
if __name__ == '__main__':
main()
count=0
f=open("test.csv","w+");
result = csv.writer(f,delimiter=',', dialect='excel-tab')
result_statememt=("date","time","Zenith","Azimuth","Elevation","conv_elevation");
result.writerow(result_statememt)
f.close()
while(count<5):
#time.sleep(60)
ser=serial.Serial()
ser.port=2
ser.baudrate=9600
ser.open()
str=ser.read(109)
print str
val=str.split(":")
print val
print "\n"
lines=str.split("\r\n")
print lines
wst=[]
print line
wst=[]
for line in lines[:]:
line=lines.split(":")
print line
f=open("test.csv","a+")
result=csv.writer(f,delimiter=',')
count=count+1
#lines=str.split("\r\n")
#print count
#f=open("test.txt","a+")
#result=csv.writer(f,delimiter=',')
#result.writerow()
f.close()
f.close()
ser.close()
程序輸出窗口:
Serial.port received data:
date is:7/12/16
time is:24-0-0
Zenith:104.85
Azimuth:110.40
Elevation:-14.85
Converted Elevation:15.79
val out put :
['date is', '7/12/16\r\ntime is', '24-0-0\r\nZenith', '104.85\r\nAzimuth', '110.40\r\nElevation', '-14.85\r\nConverted Elevation', '15.79\r\n']
lines output:
['date is:7/12/16', 'time is:24-0-0', 'Zenith:104.85', 'Azimuth:110.40', 'Elevation:-14.85', 'Converted Elevation:15.79', '']
相關的缺少的代碼位是:
import csv
with open('some.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(someiterable)
您不是用可迭代的方法編寫的,因此失敗了。 同樣,您只應打開該文件一次,然后將其關閉一次 。
這是我對您的問題所了解的:
讓我們先嘗試處理一組數據(6行),然后再處理更多數據。 據我了解,一組數據可能看起來像:
date is:7/12/16
time is:24-0-0
Zenith:104.85
Azimuth:110.40
Elevation:-14.85
Converted Elevation:15.79
這些行是\\r\\n
,但是沒關系。 假設我們通過以下方式獲得了數據:
>>> data = 'date is:7/12/16\r\ntime is:24-0-0\r\nZenith:104.85\r\nAzimuth:110.40\r\nElevation:-14.85\r\nConverted Elevation:15.79'
如果我們按行分割數據:
>>> data.splitlines()
['date is:7/12/16', 'time is:24-0-0', 'Zenith:104.85', 'Azimuth:110.40', 'Elevation:-14.85', 'Converted Elevation:15.79']
現在,我們可以在冒號處分割每一行:
>>> [line.split(':')[1] for line in data.splitlines()]
['7/12/16', '24-0-0', '104.85', '110.40', '-14.85', '15.79']
上面說的是,*對於我們數據中的每一行,我們在冒號處分割行並取第二部分(第一部分在索引0處,第二部分在索引1處)。 這是我們要寫入輸出文件的行。
現在我們知道了如何處理這條線,我們可以將其循環(在您的情況下為5次)。 另外,我通過將串行端口啟動代碼放在開頭來清理了一下代碼。 這樣,我們只初始化一次然后關閉一次。 這是代碼:
import csv
if __name__ == '__main__':
# Init serial line
ser = serial.Serial()
ser.port = 2
ser.baudrate = 9600
ser.open()
with open('test.csv', 'w+') as f:
result = csv.writer(f, delimiter=',', dialect='excel')
result.writerow(['date','time','Zenith','Azimuth','Elevation','conv_elevation']);
for count in range(5):
data = ser.read(109)
row = [line.split(':')[1] for line in data.splitlines()]
result.writerow(row)
ser.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.