使用python脚本

时间:2018-03-20 18:35:51

标签: python json csv nested

我是python的新手,我有一个需要转换为csv的大型json文件 - 下面是一个示例

{“status”:“success”,“Name”:“Theresa May”,“Location”:“87654321”,“AccountCategory”:“Business”,“AccountType”:“Current”,“TicketNo”:“ 12345-12“,”AvailableBal“:”12775.0400“,”BookBa“:”123475.0400“,”TotalCredit“:”1234567“,”TotalDebit“:”0“,”用法“:”5“,”期间“:” 2014年5月11日至2014年7月11日“,”货币“:”GBP“,”申请人“:”天使“,”签署人“:[{”姓名“:”不可用“,”BVB“:”不可用“}] ,“详情”:[{“PTransactionDate”:“24-Jul-14”,“PValueDate”:“24-Jul-13”,“PNarration”:“Cash Deposit”,“PCredit”:“0.0000”,“PDebit “:”40003.0000“,”PBalance“:”40003.0000“},{”PTransactionDate“:”24-Jul-14“,”PValueDate“:”23-Jul-14“,”PTest“:”现金存款“,” PCredit “:” 0.0000" , “PDebit”: “40003.0000”, “PBalance”: “40003.0000”},{ “PTransactionDate”: “25-JUL-14”, “PValueDate”: “22-JUL-14”,” PTest“:”现金存款“,”PCredit“:”0.0000“,”PDebit“:”40003.0000“,”PBalance“:”40003.0000“},{”PTransactionDate“:”25-Jul-14“,”PValueDate“: “21-Jul-14”,“PTest”:“Cash Deposit”,“PCredit”:“0.0000”,“PDebit”:“40003.0000”,“PBalance”:“40003.0000” },{“PTransactionDate”:“25-Jul-14”,“PValueDate”:“20-Jul-14”,“PTest”:“Cash Deposit”,“PCredit”:“0.0000”,“PDebit”:“40003.0000 ”, “PBalance”: “40003.0000”}]}

我需要将其显示为

名称,状态,位置,accountcategory,accounttype,availablebal,totalcredit,totaldebit等列,

使用pcredit,pdebit,pbalance,ptransactiondate,pvaluedate和'ptest',每行都有新值,如JSON文件所示

我已经设法将这个脚本放在一起在线查看,但它最后显示了一个空的csv文件。我做错了什么?我已经使用了在线json到csv转换器并且它可以工作,但是因为这些是敏感文件我希望用我自己的脚本编写/管理所以我可以确切地看到它是如何工作的。请参阅下面的我的python脚本 - 我可以提供一些建议吗?感谢

import csv
import json


infile = open("BankStatementJSON1.json","r")
outfile = open("testing.csv","w")

writer = csv.writer(outfile)

for row in json.loads(infile.read()):
    writer.writerow(row)

    import csv, json, sys

    # if you are not using utf-8 files, remove the next line
    sys.setdefaultencoding("UTF-8")  # set the encode to utf8
    # check if you pass the input file and output file
    if sys.argv[1] is not None and sys.argv[2] is not None:
        fileInput = sys.argv[1]
        fileOutput = sys.argv[2]
        inputFile = open("BankStatementJSON1.json","r")  # open json file
        outputFile = open("testing2.csv","w")  # load csv file
        data = json.load("BankStatementJSON1.json")  # load json content
        inputFile.close()  # close the input file
        output = csv.writer("testing.csv")  # create a csv.write
        output.writerow(data[0].keys())  # header row
        for row in data:
            output.writerow(row.values())  # values row

2 个答案:

答案 0 :(得分:0)

确保您也在最后关闭输出文件。

答案 1 :(得分:0)

这适用于您发布的JSON示例。问题是您已嵌套dict,并且无法根据需要为pcredit, pdebit, pbalance, ptransactiondate, pvaluedate and ptest创建子标题和子行。

您可以使用csv.DictWriter

import csv
import json

with open("BankStatementJSON1.json", "r") as inputFile:  # open json file
    data = json.loads(inputFile.read())  # load json content

with open("testing.csv", "w") as outputFile:  # open csv file
    output = csv.DictWriter(outputFile, data.keys())  # create a writer
    output.writeheader()
    output.writerow(data)