【发布时间】: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因为它不是;它是文件的名称。那么 - 给定文件名,您如何通常获得“实际文件”?例如,如果您想读取它或直接使用文件方法写入它? (如果你不知道这些东西,你应该在尝试这个项目之前先学习基础知识。)