簡體   English   中英

無法從python中的json-parser接收輸出

[英]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.jsontwo.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM