【问题标题】:Open json file from argparse parameter从 argparse 参数打开 json 文件
【发布时间】:2021-12-23 13:54:08
【问题描述】:

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

$ 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 应该使用的实际文件,我不知道该怎么做?

【问题讨论】:

  • 您清楚地显示的错误消息与您显示的代码不对应 - 名称不同,行号也不同。请阅读stackoverflow.com/help/minimal-reproducible-example 并确保其他人可以复制和粘贴您的示例并查看您所做的确切问题。
  • 也就是说,您应该尝试检查documentation。或者更确切地说,您似乎明白您需要一个“实际文件”来阅读。你不能简单地"tell" Python that the passed parameter is an actual file因为它不是;它是文件的名称。那么 - 给定文件名,您如何通常获得“实际文件”?例如,如果您想读取它或直接使用文件方法写入它? (如果你不知道这些东西,你应该在尝试这个项目之前先学习基础知识。)

标签: python json argparse


【解决方案1】:

你需要一个实际的文件object

import argparse

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2016-06-19
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多