问题显示AttributeError:“ str”对象没有属性“ load”吗? 解决方案

问题描述

应该在哪里更改代码?我的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)