【问题标题】:Separating values from list and write into csv file从列表中分离值并写入 csv 文件
【发布时间】:2013-12-09 05:43:43
【问题描述】:

我有下面的代码,我想用它来分隔 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', '']

【问题讨论】:

标签: python python-2.7 python-3.x


【解决方案1】:

相关缺失的代码是:

import csv
with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

用可迭代的东西写,所以失败了。此外,您应该只打开文件一次并关闭它一次

【讨论】:

    【解决方案2】:

    以下是我对您的问题的理解:

    • 从串口读取数据
    • 数据由 6 行组成
    • 每一行由一个标签(例如“日期是”)、一个冒号和一个值(例如“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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多