2016-11-29 6 views
2

Как отобразить CSV-файл в формате строкового протокола, например influxdb?Как отобразить файл csv в формате протокола?

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 as:

['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'] 

Whe Риз Я хочу, чтобы из положить в lineprotocol формат/синтаксисе, такие как:

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

А также я хочу код, чтобы иметь возможность конвертировать, Time=12:05:50:274 в время эпохи, так что он может быть использован в качестве временной метки в протоколе линии для influx db.

ответ

2

Вам нужно будет использовать атрибут «Дата» для строки, чтобы преобразовать ее в эпоху. Вот один из способов, которыми вы могли бы это сделать:

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]) 
+0

Спасибо .. это работает ... !! – Allenien3256