问题描述
应该在哪里更改代码?我的python版本是3.7.4。这里我也使用了json.loads(),bt遇到了相同类型的错误。 这是我的python代码:
def get_original_video_paths(root_dir_json,basename=False):
for json_path in glob(root_dir_json):
with open(json_path,"r") as f:
Metadata = json.load(f)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-42-625a577bf289> in <module>
49 json='F:/deepfake_data/Metadata/Metadata.json'
50 data_folder='F:/deepfake_data/train_sample_videos_2'
---> 51 ids = get_original_video_paths(json)
52 #ids = get_original_video_paths(json)
53
<ipython-input-41-a0214372cfb6> in get_original_video_paths(root_dir_json,basename)
17 dir = Path(json_path)
18 with open(json_path,"r") as f:
---> 19 Metadata = json.load(f)
20
21 for k,v in Metadata.items():
AttributeError: 'str' object has no attribute 'load'
传递文件路径:
if __name__ == '__main__':
json='F:/deepfake_data/Metadata/Metadata.json'
#data_folder='F:/deepfake_data/train_sample_videos_2'
ids = get_original_video_paths(json)
解决方法
重新评估@DeepSpace的评论,问题出在调用get_original_video_paths
之前的那一行:
json='F:/deepfake_data/metadata/metadata.json'
json
变量提供对json
模块的访问,并且通过使变量引用元数据文件的路径,您的代码都无法访问json
模块及其功能。
with open(json_path,"r") as f:
---> metadata = json.load(f)
AttributeError: 'str' object has no attribute 'load'
错误消息'str' object has no attribute 'load'
表示它查看了json
变量所引用的内容,得到了显示文件路径的字符串(str
),并尝试查找在您的字符串中称为load
的方法。
解决方案
解决此问题的简单方法是,不要将变量的名称与导入的模块相同。例如,您可以将元数据文件的路径称为“ path”或“ metadata”:
metadata = 'F:/deepfake_data/metadata/metadata.json'
data_folder = 'F:/deepfake_data/train_sample_videos_2'
ids = get_original_video_paths(metadata)