【问题标题】:how to display a csv file in line protocol format?如何以行协议格式显示 csv 文件?
【发布时间】:2016-11-29 18:16:53
【问题描述】:

如何以行协议格式显示 CSV 文件,如 influxdb 使用的那样?

measurement[,tag_key1=tag_value1...]
field_key=field_value[,field_key2=field_value2] [timestamp]

假设我的 csv 文件如下:

Date          Time            place       status      action
2 sep 2016   12:05:50:274     abc          on         batery on
16 sep 2016  12:05:51:275     mbc          on         batery on
22 sep 2016  12:05:52:276     kabc          on        batery on

我可以使用代码逐行读取整个 csv 文件:

**with open('test.csv') as fp:
      for line in fp:
         print line**

我得到的 o/p 为:

['Date','Time','place','status','action']
['2 sep 2016','12:05:50:274','abc','on','batery on']['16 sep 2016','12:05:51:275','mbc',     'on','batery on']['22 sep 2016','12:05:52:276','kabc','on','batery on']

而我希望输出采用 lineprotocol 格式/语法,例如:

Date=2 sep 2016,place=abc,'status=on,action=battery on,Time=12:05:50:274

而且我还希望代码能够将Time=12:05:50:274 转换为纪元时间,以便它可以用作influx db 的行协议中的时间戳。

【问题讨论】:

    标签: python csv influxdb


    【解决方案1】:

    您还需要使用行的“日期”属性,以便转换为纪元时间。这是您可以做到的一种方法:

    from __future__ import print_function
    
    import csv
    from datetime import datetime as dt
    
    with open('test.csv') as infile:
        headers = next(csv.reader(infile))
    
    with open('test.csv') as infile:
        for row in csv.DictReader(infile):
            row['Time'] = dt.strptime(row['Date'] + " " + row['Time'].rsplit(":",1)[0], "%d %b %Y %H:%M:%S")
            print(','.join(["%s=%s" %(header, row[header]) for header in headers])
    

    【讨论】:

    • @inspectorG4dget 这个 csv 文件如何保存在本地系统中?
    • @suryarahul:它没有保存在文件系统中;它只显示到控制台。如果要保存到文件系统,可以使用 IO 重定向或编辑 print 以包含打开的文件对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多