【问题标题】:Python2.7 json loaded text list back into an int listPython2.7 json加载文本列表回一个int列表
【发布时间】:2018-08-09 04:09:03
【问题描述】:

我通过 simplejson 从 Windows INI 文件加载列表。该列表作为字符串读入,我需要将其转换回正确的列表,因此 arr[0] = [30, 40, 80]arr[1] = [90, 255, 255]

config.ini:

Advanced Settings
tlhsv = "[30, 40, 80], [90, 255, 255]"

main.py

tlhsv = self.config.get('Advanced Settings', 'tlhsv')
print(tlhsv)
u'"[30, 40, 80], [90, 255, 255]"'

我到底应该怎么做呢?或者更好的是有一种方法可以格式化 INI 文件,以便它可以由 simplejson 自动正确读取。

我尝试以不同的方式格式化 ini,但使用 []、() 或逗号会给出 ValueError 并且什么也不解释。将其作为字符串读取就可以了。

【问题讨论】:

  • 听起来 JSON 字符串应该包含 {"tlhsv": [[30, 40, 80], [90, 255, 255]]} - 注意两个引号已更改为括号。
  • 你能告诉我们INI文件是什么样子的吗?加载它的代码是什么?因为您所拥有的不是您想要的有效 JSON(对于将字符串映射到字符串的 dict 而言,它是有效的 JSON,但您不希望该值是字符串),但是很难知道哪里出了问题,所以你可以在正确的地方做正确的事,而不是做错事然后尝试做不同的错误事来撤销它。
  • @abarnert 我更新了我在现实世界中精简的示例。我可以加载整数、浮点数和字符串,但不能加载不带引号的特殊字符。
  • @jasonharper 在列表中使用双方括号,在其余部分使用逗号和单方括号,并且 json.loads 会自动将它们作为列表加载。这绝对是关于如何正确格式化 ini 的答案,但 abhi 的答案是将字符串转回列表的正确答案。谢谢!

标签: python json python-2.7


【解决方案1】:

你可以使用 ast 模块来做到这一点

>>> import ast
>>> loaded_json = json.loads('{"tlhsv": "[30, 40, 80], [90, 255, 255]"}')
>>> li = ast.literal_eval(loaded_json['tlhsv'])
>>> li
([30, 40, 80], [90, 255, 255])
>>> 

您有多个列表,因此它将存储为元组,因为您不能将多个项目分配给单个变量,因此只需使用循环来访问元组的每个项目。

【讨论】:

  • 如果我将self.config.getast.literal_eval 一起投射,效果很好,谢谢!任何方式以不同的方式形成我的 ini 以完全不需要它,它是其他任何地方都不需要的额外依赖项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2010-12-05
  • 2018-09-20
  • 2017-03-18
相关资源
最近更新 更多