[英]Not receiving output from json-parser in python
這是非常基礎的:幾個月前,我已經成功地使用python在單個目錄中解析json文件。 但是現在我不知道如何進行調整(隊友提出了代碼),以便可以將數據轉換為更有用的csv格式。
目前,使用Python Launcher或Terminal時出現問題。
解析器的外觀如下:
import codecs
import json
import os
import sys
try:
import unicodecsv as csv
except ImportError:
import csv
OUTPUT_FILE = 'output.csv'
def process_file(infile, writer):
print('Processing file: %s' % infile)
with codecs.open(infile, encoding='utf-8') as infile:
data = json.load(infile)
for item in data:
_id = item['id']
description = item['description']
for gov in item['source']:
gov_id = gov['name']
for source in item['secondarySource']:
source_id = source['sourceId']
name = source['name']
party = source['party']
writer.writerow([_id, description, gov_id, source_id, name, party])
def process_files_in_directory(directory, outfile):
with codecs.open(outfile, 'w') as outfile:
writer = csv.writer(outfile)
writer.writerow(["id", "description", "branch", "sourceID", "name", "party"])
for f in os.listdir(path):
if f.endswith('.json'):
process_file(f, writer)
USAGE = """
Usage:
python json_parser.py <source_directory> [<output_file>]
Where source_directory is path to directory with input JSON files.
output_file is optional -- defaults to %s
File names must end with .json
""" % OUTPUT_FILE
if __name__=='__main__':
try:
directory = sys.argv[1]
except IndexError:
print(USAGE)
sys.exit(0)
if len(sys.argv) > 2:
outfile = sys.argv[2]
else:
outfile = OUTPUT_FILE
process_files_in_directory(directory, outfile)
您的腳本存在一些格式問題。 我不確定它們是否與問題有關...這是腳本的新版本。 基本想法可行,但您可能需要格式化CSV輸出以使其更具可讀性。 為了證明這項工作有效,我使用以下命令從命令行運行該命令:
python stackoverflow\junk.py stackoverflow\mydir
其中stackoverflow\\mydir
有兩個文件: one.json
和two.json
。
下面的代碼包含了我上面的評論中的修復程序
import codecs
import json
import os
import sys
try:
import unicodecsv as csv
except ImportError:
import csv
OUTPUT_FILE = 'output.csv'
def process_file(infile, writer):
print('Processing file: %s' % infile)
with codecs.open(infile, encoding='utf-8') as infile:
data = json.load(infile)
for item in data:
_id = item['id']
description = item['description']
for gov in item['source']:
gov_id = gov['name']
for source in item['secondarySource']:
source_id = source['sourceId']
name = source['name']
party = source['party']
writer.writerow([_id, description, gov_id, source_id, name, party])
def process_files_in_directory(directory, outfile):
with codecs.open(outfile, 'w') as outfile:
writer = csv.writer(outfile)
writer.writerow(["id", "description", "branch", "sourceID", "name", "party"])
for f in os.listdir(directory):
if f.endswith('.json'):
process_file(os.path.join(directory, f), writer)
USAGE = """
Usage:
python json_parser.py <source_directory> [<output_file>]
Where source_directory is path to directory with input JSON files.
output_file is optional -- defaults to %s
File names must end with .json
""" % OUTPUT_FILE
if __name__ == '__main__':
try:
directory = sys.argv[1]
except IndexError:
print(USAGE)
sys.exit(0)
if len(sys.argv) > 2:
outfile = sys.argv[2]
else:
outfile = OUTPUT_FILE
process_files_in_directory(directory, outfile)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.