Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python';str';对象没有属性';项目';_Python_Json_Python 3.x_Dictionary - Fatal编程技术网

python';str';对象没有属性';项目';

python';str';对象没有属性';项目';,python,json,python-3.x,dictionary,Python,Json,Python 3.x,Dictionary,我试图在包含字典的txt文件上循环我的代码将其读取为字符串,也尝试将这些txt文件更改为json,但由于这些单词在单引号中,因此它会说: 应使用双引号括起属性名 代码 错误 我的txt文件示例 {1: [((86, 27, 168, 50), 'haha'), ((85, 53, 195, 63), ' work for you.'), ((323, 49, 408, 57), 'Total due'), ((534, 42, 590, 59), '4.10'), ((323,

我试图在包含字典的txt文件上循环
我的代码将其读取为字符串,也尝试将这些txt文件更改为json,但由于这些单词在单引号中,因此它会说:
应使用双引号括起属性名
代码

错误

我的txt文件示例

{1: [((86, 27, 168, 50), 'haha'), ((85, 53, 195, 63), ' work for you.'), ((323, 49, 408, 57),       'Total  due'), ((534, 42, 590, 59), '4.10'), ((323, 66, 515, 77), ' do not need to make')}

问题是
read()
返回一个字符串,并且字符串没有任何与字典不同的属性“items”。另一个建议使用
readlines()
的答案也不正确,因为这只会返回一个列表。 (编辑:看起来答案已被删除,但仍然如此)

两件事:

  • 我认为您复制的文本数据不正确,末尾缺少一个]括号。
  • 2)
    json.load()
    如果您的数据使用双引号而不是单引号,将是一个很好的解决方案。事实证明,即使数据有双引号,整数键和元组也会像MisterMiyagi在评论中指出的那样成为一个问题


    无论如何,一个解决方法是使用
    ast.literal\u eval()
    (这比原始eval安全一点)


    有关eval与ast.literal\u val的比较,请参见在您的案例中
    line\u dict
    属于
    str
    类型,而不是
    dict
    ,这就是您无法解压缩它的原因。因此,请使用
    ast
    模块中的
    literal\u eval
    方法

    签名解决方案已发布

    import glob
    import ast
    for jfile in glob.glob('*.txt'):
          print(jfile)
          with open(jfile,'r') as ifile:
              lines_dict=ast.literal_eval(ifile.read())
              for page, word in lines_dict.items():
                        lines = convert_text_to_lines(word)
    

    如果文本文件将包含JSON对象,那么将其转换为Python字典的一种方法是使用
    JSON
    模块:

    import json 
    
    for jfile in file_txt.glob('*.txt')            
          with jfile.open('r') as ifile:
              lines_dict=json.load(ifile)
    
    问题是txt文件的示例不是JSON对象。在JSON格式中,键必须是用双引号括起来的字符串,但在示例中,第一个键是整数
    1
    。作为值的字符串也需要用双引号括起来,但在本例中,它们是用单引号括起来的,例如
    'haha'
    。此外,元组不能被JSON识别。此外,在示例中,在最后一个支撑之前缺少一个闭合方括号。如果修复了最后一个问题,则可以使用
    eval
    函数将字符串转换为Python字典,但这会带来:


    该文件包含的是一个dict的字符串表示形式,而不是实际的dict。这有点像看一本书的图片——你不能翻页,但你可以使用图片找到真正的书。在您的情况下,您必须首先将文件内容转换回实际的dict,例如通过
    ast.literal\u eval
    。这是您文件的实际内容吗?你确定结尾附近没有遗漏结尾的
    ]
    吗?请避免暗示Python符号是“几乎”JSON。人们会得到错误的印象,并试图将其中一个转变为另一个。区别远不止“你的数据使用了双引号而不是单引号”。即使只是在所示的示例中,JSON也会阻塞整数键和元组
    for jfile in file_txt.glob('*.txt'):        
        with jfile.open('r') as ifile:   
            lines_dict=ast.literal_eval(ifile.read())
    
    import glob
    import ast
    for jfile in glob.glob('*.txt'):
          print(jfile)
          with open(jfile,'r') as ifile:
              lines_dict=ast.literal_eval(ifile.read())
              for page, word in lines_dict.items():
                        lines = convert_text_to_lines(word)
    
    import json 
    
    for jfile in file_txt.glob('*.txt')            
          with jfile.open('r') as ifile:
              lines_dict=json.load(ifile)
    
    for jfile in file_txt.glob('*.txt')            
          with jfile.open('r') as ifile:
              lines_dict = eval(ifile.read())