2017-04-03 290 views
2

是否可以將csv文件數據推送到influxdb中。例如我有一個傳感器設備,每分鐘更新數據到csv文件。我需要對它做一些操作。 我需要將csv文件數據推送到influxdb,爲此我正在編寫一個python腳本。 我試圖找到一些例子,但無法找到任何成功。在我的python腳本下面只能讀取csv文件代碼,這很簡單,但沒有代碼如何將這個csv傳遞到influx數據庫。我正在嘗試的csv文件和代碼看起來像這樣。將csv文件數據導入influxdb

DATE,value 
2017-03-23 11:50:38,16 
2017-03-23 11:50:44,83 
2017-03-23 11:50:50,16 
2017-03-23 11:50:56,70 
2017-03-23 11:51:02,96 

而且代碼

import datetime 
import random 
import time 
import os 
import csv 
from csv import reader 
import argparse 
from influxdb import client as influxdb 


db = influxdb.InfluxDBClient(host, 8086, rob, xxxx, sensors_data) 


def read_data(filename): 
    with open(filename) as f: 
     reader = f.readlines()[1:] 
     for line in reader: 
      print line 


if __name__ == '__main__': 
    filename = '/home/rob/myfile.csv' 
    a = read_data(filename) 

我發現這個鏈接,但它的不同,不按我的要求。 http://coendegroot.com/grafana-influxdb-and-python-simple-sample/ 我可以讀取這個csv文件,現在我需要發送csv文件數據流入數據庫。但我不知道如何處理python腳本。我試圖找到例子,但沒有成功。如果有人指導我,我會非常感激。 感謝名單了很多

我根據Pigueiras建議更改代碼,它看起來像這樣

import datetime 
import random 
import time 
import os 
import csv 
from csv import reader 
import argparse 
from influxdb import client as influxdb 


db = influxdb.InfluxDBClient(host, 8086, rob, xxxx, sensors_data) 
def read_data(): 
    with open('file.csv') as f: 
     return [x.split(',') for x in f.readlines()[1:]] 

a = read_data() 

for metric in a: 
    influx_metric = [{ 
     'measurement': 'your_measurement', 
     'time': a[0], 
     'fields': { 
      'value': a[1] 
     } 
    }] 
    db.write_points(influx_metric) 

我嘗試此代碼,它給我下面的錯誤

'NameError: name 'your_measurement' is not defined 

,如果我使用像像'測量':'your_measurement'。然後我得到這個錯誤。 .......

File "all_flux.py", line 37, in <module> 
db.write_points(influx_metric) 
    File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 411, in write_points 
tags=tags, protocol=protocol) 
    File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 461, in _write_points 
protocol=protocol 
    File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 282, in write 
data = make_lines(data, precision).encode('utf-8') 
    File "/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py", line 154, in make_lines 
_convert_timestamp(point['time'], precision) 
    File "/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py", line 40, in _convert_timestamp 
raise ValueError(timestamp) 
ValueError: ['2017-03-23 11:50:38', '16\r\n'] 

DATE域或列看起來像這樣 '2017年3月23日十一時50分38秒' 所以我用回[x.split( '').. .. 也我忽略第一行。但我得到了這個值的錯誤

回答

3

你只需要建立一個JSON體來插入到Influx與您從CSV讀取的數據。請注意0​​函數,它不會返回任何東西。

像這樣的東西應該可以正常工作(當然,它可以優化在一次插入多個點):

def read_data(): 
    with open('file.csv') as f: 
     return [x.split(',') for x in f.readlines()[1:]] 

a = read_data() 

for metric in a: 
    influx_metric = [{ 
     'measurement': 'your_measurement', 
     'time': metric[0], 
     'fields': { 
      'value': metric[1] 
     } 
    }] 
    db.write_points(influx_metric) 
+0

感謝名單了很多。我會試一試,很快就會回來。 – rob

+0

我試過你的代碼,它給了我下面的錯誤''NameError:名字'your_measurement'沒有定義 ,如果我使用像'測量':'your_measurement'。然後我得到這個錯誤。 .......''文件'/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py「,第40行,在_convert_timestamp raise ValueError(timestamp) ValueError:['DATE,值'] ' – rob

+0

我會更新我的問題與您的代碼和以下錯誤。可能看起來很亂。非常感謝 – rob