2014-12-11 21 views
5

próbuje naciskać danych csv do MongoDB użyciu python.i'm początkujący do Pythona & mongodb..i używany następujący kodjak do pchania danych csv do MongoDB przy użyciu Pythona

import csv 
import json 
import pandas as pd 
import sys, getopt, pprint 
from pymongo import MongoClient 
#CSV to JSON Conversion 
csvfile = open('C://test//final-current.csv', 'r') 
jsonfile = open('C://test//6.json', 'a') 
reader = csv.DictReader(csvfile) 
header= [ "S.No", "Instrument Name", "Buy Price", "Buy Quantity", "Sell Price", "Sell Quantity", "Last Traded Price", "Total Traded Quantity", "Average Traded Price", "Open Price", "High Price", "Low Price", "Close Price", "V" ,"Time"] 
#fieldnames=header 
output=[] 
for each in reader: 
    row={} 
    for field in header: 
     row[field]=each[field] 
    output.append(row) 

json.dump(output, jsonfile, indent=None, sort_keys=False , encoding="UTF-8") 
mongo_client=MongoClient() 
db=mongo_client.october_mug_talk 
db.segment.drop() 
data=pd.read_csv('C://test//6.json', error_bad_lines=0) 
df = pd.DataFrame(data) 
records = csv.DictReader(df) 
db.segment.insert(records) 

ale wyjście jest podany w tym formacie

/* 0 */ 
{ 
    "_id" : ObjectId("54891c4ffb2a0303b0d43134"), 
    "[{\"AverageTradedPrice\":\"0\"" : "BuyPrice:\"349.75\"" 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("54891c4ffb2a0303b0d43135"), 
    "[{\"AverageTradedPrice\":\"0\"" : "BuyQuantity:\"3000\"" 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("54891c4ffb2a0303b0d43136"), 
    "[{\"AverageTradedPrice\":\"0\"" : "ClosePrice:\"350\"" 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("54891c4ffb2a0303b0d43137"), 
    "[{\"AverageTradedPrice\":\"0\"" : "HighPrice:\"0\"" 
} 

Właściwie chcę lubić wyjście dla pojedynczego ID Wszystkie pozostałe pola należy pokazał jak podtypów np

_id" : ObjectId("54891c4ffb2a0303b0d43137") 
    AveragetradedPrice :0 
    HighPrice:0 
    ClosePrice:350 
    buyprice:350.75 

Proszę mi pomóc Out.Thanks z góry

+0

output.append (wiersz) => db.segment.insert (wiersz) – anhlc

+0

ale jeśli jestem popychanie bezpośrednio do MongoDB, produkuje InvalidDocument: klucz 'S.No' nie może zawierać "." – Viswanathan

+0

Ustaw nagłówek jako dyktat, aby mapować s.no jako s_no, więc będzie się znajdować jako klucz json. – anhlc

Odpowiedz

5

Dziękuję za suggestion.This jeden jest poprawiony kod:

import csv 
import json 
import pandas as pd 
import sys, getopt, pprint 
from pymongo import MongoClient 
#CSV to JSON Conversion 
csvfile = open('C://test//final-current.csv', 'r') 
reader = csv.DictReader(csvfile) 
mongo_client=MongoClient() 
db=mongo_client.october_mug_talk 
db.segment.drop() 
header= [ "S No", "Instrument Name", "Buy Price", "Buy Quantity", "Sell Price", "Sell Quantity", "Last Traded Price", "Total Traded Quantity", "Average Traded Price", "Open Price", "High Price", "Low Price", "Close Price", "V" ,"Time"] 

for each in reader: 
    row={} 
    for field in header: 
     row[field]=each[field] 

    db.segment.insert(row) 
-1

Istnieje lepszy sposób z mniejszą liczbą importu, zakładając, że masz wiersz nagłówka w Twoim pliku CSV.

from pymongo import MongoClient 
import csv 

# DB connectivity 
client = MongoClient('localhost', 27017) 
db = client.db 
collection = db.collection 

# Function to parse csv to dictionary 
def csv_to_dict(): 
    reader = csv.DictReader(open(FILEPATH)) 
    result = {} 
    for row in reader: 
     key = row.pop('First_value') 
     result[key] = row 
    return query 

# Final insert statement 
db.collection.insert_one(csv_to_dict()) 

nadzieję, że pomoże

Powiązane problemy