2017-04-03 69 views
2

ist es möglich, csv-Dateidaten in Influxdb zu drücken. Beispielsweise hatte ich eine Sensorvorrichtung, die jede Minute Daten in die CSV-Datei aktualisiert. Ich muss einige Operationen darauf machen. Ich muss CSV-Datei Daten in Influxdb schieben und zu diesem Zweck schreibe ich ein Python-Skript. Ich habe versucht, einige Beispiele zu finden, konnte aber keine finden. unter meinem Python-Skript hatte nur lesen csv-Datei-Code, der einfach ist, aber kein Code, wie diese csv an Influx db übergeben. Meine CSV-Datei und Code, die ich versuche, sieht so aus.Importieren von CSV-Dateidaten in 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 

und der Code ist

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) 

ich diesen Link zu finden, aber seine verschiedenen und sich nicht nach meinen Anforderungen. http://coendegroot.com/grafana-influxdb-and-python-simple-sample/ Ich kann diese CSV-Datei lesen und jetzt muss ich csv-Datei Daten zu Influx db senden. aber ich weiß nicht, wie man mit Python-Skript vorgeht. Ich habe versucht, Beispiele zu finden, aber keinen Erfolg. Wenn mich jemand führt, werde ich sehr dankbar sein. thanx viel

ich ändern Sie den Code nach Pigueiras Vorschlag und es sieht so aus

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) 

ich diesen Code versucht, und es mir geben Fehler folgende

'NameError: name 'your_measurement' is not defined 

und wenn ich wie verwenden wie 'Messung': 'your_measurement'. Dann habe ich diesen Fehler bekommen. .......

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

das Datumsfeld oder Spalten wie folgt aussieht '2017.03.23 11.50.38' so verwende ich return [x.split ('') .. .. und ich ignoriere auch die erste Zeile. aber ich habe diesen Wert Fehler

Antwort

3

Sie müssen nur einen JSON-Körper bauen, um in Influx mit den Daten einfügen, die Sie aus der CSV lesen. Seien Sie vorsichtig mit der read_data Funktion, die nichts zurückgibt.

So etwas sollte gut funktionieren (natürlich kann es mehrere Punkte auf einmal einzufügen optimiert werden):

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

thanx viel. Ich werde es versuchen und werde bald wiederkommen. – rob

+0

Ich habe versucht, Ihren Code und es gibt mir folgenden Fehler '' NameError: Name 'Ihre_Messung' ist nicht definiert und wenn ich wie 'Messung' verwenden: 'Ihre_Messung'. Dann habe ich diesen Fehler bekommen. ....... "Datei" /usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py ", Zeile 40, in _convert_timestamp raise ValueError (Zeitstempel) ValueError: ['DATE, Wert '] ' – rob

+0

Ich werde meine Frage mit Ihrem Code und folgendem Fehler aktualisieren. es könnte unordentlich aussehen. Vielen Dank für die Hilfe – rob