2017-10-16 4 views
1

J'essaie de comprendre comment modifier mon code afin qu'il écrira chaque ligne d'un csv à son propre json, qui sera ensuite affiché (avec comment je veux essayer et boucle à travers cela, le fichier json étant écrasé chaque fois n'est pas un problème). Mon code produit jsons structuré comme j'en ai besoin et les formats tout au bon type de données, mais je ne peux pas pour la vie de moi comprendre comment faire une boucle à travers cette ligne sage. J'ai un autre code qui peut atteindre ce second but, mais toutes mes tentatives pour les combiner ont échoué jusqu'à présent.Créer un JSON par ligne de csv

Avez-vous des suggestions sur la façon dont je pourrais parcourir ce code?

output = [] 
with open('Test3.csv') as csv_file: 
    for a in csv.DictReader(csv_file): 
     output.append({ 
      'OrderType': a['OrderType'], 
      'OrderStatus': a['OrderStatus'], 
      'OrderDateTime': a['OrderDateTime'], 
      'SettlementDate': a['SettlementDate'], 
      'MarketId': int(a['MarketId']), 
      'OrderRoute': a['OrderRoute'], 
      'OrderEntityType': a['OrderEntityType'], 
      'SecurityId': a['SecurityId'], 
      'CurrencyISOCode': a['CurrencyISOCode'], 
      'Price': float(a['Price']), 
      'TotalCommission': float(a['TotalCommission']), 
      'SettlementStatus': a['SettlementStatus'], 
      'QuantitySettled': float(a['QuantitySettled']), 
      'SecurityOrderAllocations': { 
       'Reference': a['Account Number'], 
       'InvestmentCollectiveId': a['Account Number'], 
       'NominalAmount': float(a['QuantitySettled']), 
       'InvestmentAmount': float(a['InvestmentAmount']), 
       'OpenNominal': float(a['QuantitySettled']), 
       'SettlementCurrencyISOCode': 'USD', 
       'SettlementAccountId': a['Account Number'], 
       'OrderToSettlementExchangeRate': float('1'), 
       'SettlementToPortfolioExchangeRate': float('1'), 
       'OrderToPortfolioExchangeRate': float('1') 
      } 
     }) 

output_json = json.dumps(output) 
with open ('Test.json', 'w') as f: 
    f.write(output_json) 
+0

Vous souhaitez que chaque ligne soit écrite dans un fichier JSON différent, comme 'test1.json',' test2.json', etc.? – Barmar

+0

Pour clarifier - votre but est d'avoir chaque dictionnaire (actuellement ajouté) enregistré en tant que son propre fichier json? – DZack

+0

@Barmar Je suis heureux de les avoir écrits dans des fichiers individuels, ou de les avoir écrits dans un fichier qui est constamment écrasé après publication - ce code est actuellement configuré pour écrire un très long json avec tout en un seul appel, plutôt qu'individuellement. – Bleu

Répondre

2

Convertir chaque dict que vous créez à partir d'une ligne du fichier CSV à JSON, et d'écrire que dans un fichier (ou POST à ​​une URL, ou tout ce que vous voulez faire avec elle).

filenum = 1 
with open('Test3.csv') as csv_file: 
    for a in csv.DictReader(csv_file): 
     json = json.dumps({ 
      'OrderType': a['OrderType'], 
      'OrderStatus': a['OrderStatus'], 
      'OrderDateTime': a['OrderDateTime'], 
      'SettlementDate': a['SettlementDate'], 
      'MarketId': int(a['MarketId']), 
      'OrderRoute': a['OrderRoute'], 
      'OrderEntityType': a['OrderEntityType'], 
      'SecurityId': a['SecurityId'], 
      'CurrencyISOCode': a['CurrencyISOCode'], 
      'Price': float(a['Price']), 
      'TotalCommission': float(a['TotalCommission']), 
      'SettlementStatus': a['SettlementStatus'], 
      'QuantitySettled': float(a['QuantitySettled']), 
      'SecurityOrderAllocations': { 
       'Reference': a['Account Number'], 
       'InvestmentCollectiveId': a['Account Number'], 
       'NominalAmount': float(a['QuantitySettled']), 
       'InvestmentAmount': float(a['InvestmentAmount']), 
       'OpenNominal': float(a['QuantitySettled']), 
       'SettlementCurrencyISOCode': 'USD', 
       'SettlementAccountId': a['Account Number'], 
       'OrderToSettlementExchangeRate': float('1'), 
       'SettlementToPortfolioExchangeRate': float('1'), 
       'OrderToPortfolioExchangeRate': float('1') 
      } 
     }) 
     with open('Test' + str(filenum) + '.csv', 'w') as f: 
      f.write(json) 
    filenum += 1