使用 argparse 打开 json 文件?



我最近开始使用argparse,我正在尝试使用它来打开json文件,其中包括输出到csv文件。

import argparse
import os
import json
import csv
import pandas as pd
parser = argparse.ArgumentParser(description='Json to Csv')
parser.add_argument('file', type=argparse.FileType('r'))
#parser.add_argument('file', type=str)
args = parser.parse_args()
with args.file as json_data:
print(json_data)
#argparse_dict = vars(args)
#argparse_dict.update(json_data)

baseline_dict = {}
try:
baseline_dict = json.load(json_data)
except:
print("JSON Baseline File {}: Unable to LOAD")
results_dict = baseline_dict["results"]
"""with open(args.file) as json_data:
baseline_dict = {}
try:
baseline_dict = json.load(json_data)
except:
print("JSON Baseline File {}: Unable to LOAD")"""

将新字典 #Turns 到数据帧中 df = pd。数据帧(results_dict(

当我尝试在终端中使用 argparse 打开 json 文件时,出现此错误。我知道它正在拉取 json 文件,因为我可以在将其调用为 json_data 之前让它运行。

with args.file as json_data:
JSON Baseline File {}: Unable to LOAD
Traceback (most recent call last):

因为你使用argparse.FileType作为参数type,所以args.file已经是一个打开的文件句柄,就像它是由open返回的一样。如果要确保它确定性地关闭(并为其指定一个非限定名称(,则只需:

with args.file as json_data:

或只是:

with args.file:

如果不需要别名到本地名称。

可以通过两种方式加载文件的脚本:

import argparse, json
parser = argparse.ArgumentParser()
parser.add_argument('--file', type=argparse.FileType('r'))
parser.add_argument('--name')
args = parser.parse_args()
print(args)
if args.file is not None:
print(json.load(args.file))
args.file.close()

if args.name is not None:
with open(args.name) as f:
print(json.load(f))

示例运行:

1307:~/mypy$ python3 stack62557562.py 
Namespace(file=None, name=None)
1307:~/mypy$ python3 stack62557562.py --file foo.json
Namespace(file=<_io.TextIOWrapper name='foo.json' mode='r' encoding='UTF-8'>, name=None)
{'foo': 12, 'bar': 'twelve'}
1307:~/mypy$ python3 stack62557562.py --name foo.json
Namespace(file=None, name='foo.json')
{'foo': 12, 'bar': 'twelve'}
1307:~/mypy$ python3 stack62557562.py --name foo.json --file foo.json
Namespace(file=<_io.TextIOWrapper name='foo.json' mode='r' encoding='UTF-8'>, name='foo.json')
{'foo': 12, 'bar': 'twelve'}
{'foo': 12, 'bar': 'twelve'}

最新更新