簡體   English   中英

從列表中分離值並將其寫入csv文件

[英]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')
  • 您想要捕獲值並將其寫入CSV文件(帶標題)

讓我們先嘗試處理一組數據(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM