【发布时间】:2020-10-14 20:39:34
【问题描述】:
我最近刚开始使用 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")"""
#将新字典变成数据框 df = pd.DataFrame(results_dict)
当我尝试在终端中使用 argparse 打开 json 文件时,出现此错误。我知道它正在提取 json 文件,因为我可以在将其调用为 json_data 之前让它运行。
with args.file as json_data:
JSON Baseline File {}: Unable to LOAD
Traceback (most recent call last):
【问题讨论】:
-
不是您当前问题的一部分,但您的整个
for循环毫无意义。如果您想要名为"results"的键的值,只需执行results_dict = baseline_dict["results"](或results_dict = baseline_dict.get("results", {}),如果"results"键可能不存在并且您想在这种情况下静默使用空dict)并删除所有从results_dict = {}到del (baseline_dict)的代码,其中有多个错误。 -
放弃
FileType使用;让argparse给你一个文件名(字符串),然后你可以with open并加载它。随着现代人对with open的偏好,FileType已经过时了。 -
@hpaulj:我不同意;让
argparse捕获异常并将其转换为对您有用的错误消息非常方便。当然,您需要自己添加with,但对于脚本(与库相反),您拥有顶级控制权,因此问题相当有限。 -
请注意,是
open返回 的对象,而不是对open本身的调用,它让with语句确保它被关闭。 -
尝试使用打开和不使用文件类型或使用文件类型并仅返回:JSON Baseline File {}: Unable to LOAD Traceback(最近一次调用最后一次):参见上面的编辑。