comment pousser un csv des données dans mongodb à l'aide de python
En essayant de repousser les csv les données dans mongodb à l'aide de python.je suis débutant en python & mongodb..j'ai utilisé le code suivant
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)
mais le résultat est donné dans ce format
/* 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\""
}
En fait, je veux de la sortie, comme pour un seul id de tous les autres champs devrait être montré que les sous-types
par exemple:
_id" : ObjectId("54891c4ffb2a0303b0d43137")
AveragetradedPrice :0
HighPrice:0
ClosePrice:350
buyprice:350.75
Merci de m'aider.Merci d'avance
- de sortie.append(ligne) => db.segment.insert(ligne)
- mais si je pousse directement à mongodb ,il produit InvalidDocument: clé 'S. No' ne doit pas contenir de '.'
- Faire de l'en-tête comme une dict à la carte s.pas comme s_no de sorte qu'il sera accetable json clé
- Est-il une raison particulière de ne pas utiliser
mongoimport
? - Enfin je l'ai eu fait.Merci
Vous devez vous connecter pour publier un commentaire.
Merci pour la suggestion.C'est le code corrigé:
La façon la plus simple est d'utiliser les pandas
mon code est
maintenant, vous pouvez insérez ce json dans votre mangodb base de données :-]
Pourquoi ne vous insérez des données une par une? Jetez un oeil à celui-ci.
S'il vous plaît être conscient qu'il risque de plantage de votre application lorsque le fichier est trop gros.
Il ya une meilleure façon avec moins de nombre d'importations, en supposant que vous avez une ligne d'en-tête dans un fichier CSV.
Espère que ça aide