2016-12-15 2 views
0

Я - питон noob и работаю с Plaid API для получения банковских транзакций. Я бы хотел, чтобы каждая транзакция была собственной линией, и я хочу только вытащить четыре значения за запись: дату, _account, имя & сумму и заполнить CSV-файл этими данными. У меня есть код ниже, который заполняет одну строку CSV (файл JSON также прилагается). Я не могу понять, что я ищу, насколько примеры о том, как это сделать после немного Googling. Буду признателен за любую оказанную помощь.JSON Single Line Parse to Multi-Line CSV с Python

import csv 

#Configuration 
from plaid import Client 

Client.config({ 
    'url': 'https://api.plaid.com' 
}) 

#Connect to Plaid 
from plaid import Client 
from plaid import errors as plaid_errors 
from plaid.utils import json 

client = Client(client_id='test_id', secret='test_secret') 
account_type = 'suntrust' 

try: 
    response = client.connect(account_type, { 
    'username': 'plaid_test', 
    'password': 'plaid_good' 
    }) 
except plaid_errors.PlaidError: 
    pass 
else: 
    connect_data = response.json() 

#Get transactions from Plaid 
response = client.connect_get() 
transactions = response.json() 

#Save the transactions JSON response to a csv file in the Python Projects directory 
with open('transactions.csv', 'w') as outfile: 
    json.dump(transactions, outfile) 

csvfile = open('transactions.csv', 'r') 
jsonfile = open('transactions.json', 'w') 

fieldnames = ("date", "_account","name","amount") 
reader = csv.DictReader(csvfile, fieldnames) 
for row in reader: 
    json.dump(row, jsonfile) 
    jsonfile.write('\n') 

JSON FILE

+0

В чем Ваш вопрос? –

+1

Взгляните на класс [DictWriter] (https://docs.python.org/2/library/csv.html#csv.DictWriter) в документации Python. Было бы намного проще преобразовать JSON в csv. – thalesmello

+0

Код json лучше для решения проблемы –

ответ

1

Я думаю, что вы делаете это слишком сложной и запутанной JSON с CSV. Совет шляпы @thalesmallo, который избил меня до удара, используя класс DictWriter. Попробуйте следующее:

import csv 
from plaid import Client 

Client.config({ 
    'url': 'https://api.plaid.com' 
}) 

#Connect to Plaid 
from plaid import Client 
from plaid import errors as plaid_errors 
from plaid.utils import json 

client = Client(client_id='test_id', secret='test_secret') 
account_type = 'suntrust' 

try: 
    response = client.connect(account_type, { 
     'username': 'plaid_test', 
     'password': 'plaid_good' 
    }) 
except plaid_errors.PlaidError: 
    pass 
else: 
    connect_data = response.json() 
response = client.connect_get() 
data = response.json() 
transactions = data['transactions'] # see https://plaid.com/docs/api/#data-overview 

#Save the transactions JSON response to a csv file in the Python Projects directory 
header = ("date", "_account", "name", "amount") 
with open('transactions.csv', 'w') as f: 
    writer = csv.DictWriter(f, fieldnames=header, extrasaction='ignore') 
    writer.writeheader() 
    for x in transactions: 
     writer.writerow(x) 
+0

Престижность и благодарность как @ 2ps, так и thalesmello. Код работал красиво с небольшими изменениями. Я посмотрел на предлагаемую документацию, которую я нашел очень полезной (хотя я не совсем понял ее). Я очень благодарен всем за помощь. – battery514