【问题标题】:read a list from file从文件中读取列表
【发布时间】:2015-02-17 20:11:59
【问题描述】:

我的文件包含这种格式 [{"a":1, "c":4},{"b":2, "d":5}],我想将此文件读入 python 中的列表。列表项应该是 {"a":1, "c":4} 和 {"b":2, "d":5}。我试图读入一个字符串,然后将类型转换为一个列表,但这没有帮助。它是一个字符一个字符地读取。

【问题讨论】:

    标签: json list python-2.7


    【解决方案1】:

    您可以像这样将包含列表的字符串“转换”为实际列表

    >>> import ast
    >>> ast.literal_eval('[{"a":1, "c":4},{"b":2, "d":5}]')
    [{'a': 1, 'c': 4}, {'b': 2, 'd': 5}]
    

    你当然可以为你从文件中读取的数据分出文字字符串

    【讨论】:

      【解决方案2】:

      另一个更脏的选项是这个(它会产生字符串列表):

      a = str('[{"a":1, "c":4},{"b":2, "d":5}]')
      b = list()
      
      for i in a.replace('[','').replace(']','').split(sep='},'):
          b.append(i+'}')
      
      b[len(b)-1] = b[len(b)-1].replace('}}','}')
      
      for i in b:
          i
      
      
      '{"a":1, "c":4}'
      '{"b":2, "d":5}'
      

      由于 Tim 之前提出的 ast 会比第一级更深入,它实际上会将底层字符串转换为字典。因此,您将获得字典列表,而不是字符串列表。我不确定这是否是你想要的。

      【讨论】:

      • it will actually convert underlying string into dictionary. So instead of list of strings you will get list of dictionaries. I am not sure if that's what you want to get. 我想是的,他说The list items should be {"a":1, "c":4} and {"b":2, "d":5}
      【解决方案3】:

      使用 json 模块加载 json 数据。由于json数据是列表,所以在python中调用json.load时会转换为列表:

      import json
      
      with open(path_to_jsonfile, 'r') as jsonfile:
          jsonlist = json.load(jsonfile)
      for listitem in jsonlist:
          print listitem
      

      结果应该是:

      {u'a': 1, u'c': 4}
      {u'b': 2, u'd': 5}
      

      如果您不想读取整个文件,而只是从中提取一个字符串并尝试将其转换为列表,请改用json.loads 方法。 json.load 读取文件,json.loads 读取字符串。

      【讨论】:

      • 我收到“未解码 json 对象”错误。我已经尝试加载 json,但不知何故它不起作用。
      • 在这种情况下,您需要准确地使用您输入的内容以及您正在使用的代码来更新问题。您在问题中发布了有效的 json,并且我发布的代码可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多