首页 > 解决方案 > 从 argparse 参数打开 json 文件

问题描述

我有一个程序接受用户的文件名作为参数,如:

$ myprog -i filename

文件名是一个包含 JSON 数据的文件。

当我尝试将文件加载到 JSON 对象中时,例如:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-i', action='store')
filename = args.i

json_data = json.load(filename)

我收到来自 Python 的错误消息:

line 316, in main
    json_data = json.load(input_file)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/__init__.py", line 293, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

我需要“告诉”Python 传递的参数是 json.load 应该使用的实际文件,我不知道该怎么做?

标签: pythonjsonargparse

解决方案


您需要一个实际的文件对象

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-i', action='store')
filename = args.i

with open(filename) as f:
    json_data = json.load(f)

请记住,如果您不提供绝对路径,则该文件需要与脚本位于同一目录中


推荐阅读