Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中未接收来自json解析器的输出_Python_Json_Parsing_Csv_Output - Fatal编程技术网

在python中未接收来自json解析器的输出

在python中未接收来自json解析器的输出,python,json,parsing,csv,output,Python,Json,Parsing,Csv,Output,这是非常基本的:几个月前,我在一个目录中成功地使用python解析json文件。但是现在我不知道我是如何调整它的(一个队友想出了代码),以便我可以将数据转换成更有用的csv格式 目前,当我使用Python启动器或终端时,我得到了很多好处 解析器的外观: import codecs import json import os import sys try: import unicodecsv as csv except ImportError: import csv

这是非常基本的:几个月前,我在一个目录中成功地使用python解析json文件。但是现在我不知道我是如何调整它的(一个队友想出了代码),以便我可以将数据转换成更有用的csv格式

目前,当我使用Python启动器或终端时,我得到了很多好处

解析器的外观:

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)
导入编解码器
导入json
导入操作系统
导入系统
尝试:
将Unicodesv导入为csv
除恐怖外:
导入csv
输出文件='OUTPUT.csv'
def过程_文件(填充、写入):
打印('正在处理文件:%s'%1!')
使用编解码器。打开(infle,encoding='utf-8')作为infle:
data=json.load(infle)
对于数据中的项目:
_id=项目['id']
描述=项目['description']
对于项目['source']中的政府:
gov_id=gov['name']
对于项['secondarySource']中的源:
source\u id=source['sourceId']
名称=源['name']
参与方=来源[“参与方”]
writer.writerow([\u id,description,gov\u id,source\u id,name,party])
def process_目录中的文件(目录,输出文件):
使用编解码器。打开(输出文件,'w')作为输出文件:
writer=csv.writer(输出文件)
writer.writerow([“id”、“description”、“branch”、“sourceID”、“name”、“party”])
对于os.listdir(路径)中的f:
如果f.endswith('.json'):
进程文件(f,编写器)
用法=”“”
用法:
python json_parser.py[]
其中source_directory是带有输入JSON文件的目录的路径。
输出文件是可选的--默认为%s
文件名必须以.json结尾
“”%OUTPUT\u文件
如果“名称”=“\uuuuuuuu主要”:
尝试:
directory=sys.argv[1]
除索引器外:
打印(使用)
系统出口(0)
如果len(sys.argv)>2:
outfile=sys.argv[2]
其他:
outfile=输出文件
处理\u目录中的\u文件(目录,输出文件)

您的脚本存在一些格式问题。我不确定他们是否与这些问题有关。。。这是您的脚本的新版本。基本思想是可行的,但您可能希望格式化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)
导入编解码器
导入json
导入操作系统
导入系统
尝试:
将Unicodesv导入为csv
除恐怖外:
导入csv
输出文件='OUTPUT.csv'
def过程_文件(填充、写入):
打印('正在处理文件:%s'%1!')
使用编解码器。打开(infle,encoding='utf-8')作为infle:
data=json.load(infle)
对于数据中的项目:
_id=项目['id']
描述=项目['description']
对于项目['source']中的政府:
gov_id=gov['name']
对于项['secondarySource']中的源:
source\u id=source['sourceId']
名称=源['name']
参与方=来源[“参与方”]
writer.writerow([\u id,description,gov\u id,source\u id,name,party])
def process_目录中的文件(目录,输出文件):
使用编解码器。打开(输出文件,'w')作为输出文件:
writer=csv.writer(输出文件)
writer.writerow([“id”、“description”、“branch”、“sourceID”、“name”、“party”])
对于os.listdir(目录)中的f:
如果f.endswith('.json'):
进程文件(os.path.join(directory,f),writer)
用法=”“”
用法:
python json_parser.py[]
其中source_directory是带有输入JSON文件的目录的路径。
输出文件是可选的--默认为%s
文件名必须以.json结尾
“”%OUTPUT\u文件
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
尝试:
directory=sys.argv[1]
除索引器外:
打印(使用)
系统出口(0)
如果len(sys.argv)>2:
outfile=sys.argv[2]
其他:
outfile=输出文件
处理\u目录中的\u文件(目录,输出文件)

您是否将其作为传递参数的脚本运行?不,我没有。。。我们该怎么做呢?为这一切的绿色提前表示最诚挚的歉意!不用担心,用法是在文件末尾指定的,
python-json\u-parser.py[]
因此调用文件
json\u-parser.py
确保您与保存它的目录相同,然后使用
python-json\u-parser.py-path\u-to\u-source\u-dir
运行它,输出文件是可选的。只需确保源目录中有您的json文件,谢谢。所以我编辑了这一行:
directory=“/Users/…”
,现在我在终端中读到一个错误,说它遇到的第一个JSON文件不存在..谢谢@mtik00;我会试一试的——老实说,我希望有一个8-10mb的csv文件,所以也许我真的对结果很不耐烦。这不是第一次至少很容易弄清楚脚本是否仍在终端中运行。。。在完成之前,您不会再收到提示。您很可能还会看到输出文件的大小周期性地增加(操作系统刷新数据时)。