[英]Using Json.load Changes The Order Of My Config File
我一直试图找到解决这个问题的方法,但我一直没能找到。 我创建了一个使用.config文件运行的 UI。 我的代码可以毫无问题地检索所有必要的信息,并且一切运行顺利。 目前使用这种方法来读取文件,因为这对我的场合最有效:
with open(config_file_path_name, 'r') as i:
self.contents_dict = json.load(i)
我的问题如下,我不仅使用 UI 来查看文件并获取信息,而且还调整值,然后在最后将它们写回文件。 如果我再也没有查看 .config 文件,我不会有任何问题,但每当我想在其中添加一个新字段时,我绝对必须这样做(我的 UI 会根据文件自动生成任何新字段)。 由于这个过程,我已经手动格式化了.config文件以使内容按特定顺序排列,这样我可以在添加内容时轻松找到自己的方式(并使其看起来更有条理)。 问题是当文件通过json.load
时,由于字典不需要特定的顺序,因此文件完全重新排列。 不知道为什么它是这样设计的,但我找不到保持文件原始顺序的方法。
例子:
假设文件是这样手动设置的:
{
'C' : '3',
'A' : '1',
'B' : '2',
}
function json.load
会立即将其更改为如下所示的不同内容:
{
'B' : '2',
'C' : '3',
'A' : '1',
}
看看这里,我看到人们在谈论OrderedDict
function 但这对我不起作用,因为我想要我之前设置的订单,而不是由这个 function 创建的订单。 起初我认为这与之前使用ast.literal_eval
相关,因为文件的格式是这样的,但是在花了一些时间改变一些东西并切换到json.load
,我意识到这不是问题。 任何建议将不胜感激。
感谢您的时间!
我已经能够解决问题了!
在打开文件时使用object_pairs_hook=collections.OrderedDict
确实有效,但由于某种原因,它在像上面那样完全写入时会引发休眠错误。 相反,我必须from collections import OrderedDict
执行object_pairs_hook=OrderedDict
。 我的 PyCharm 仍然抛出Optional[(List[Tuple[Any, Any]]) -> Any]',得到 'Type[OrderedDict]突出显示,但是当我运行代码时,它会做它应该做的事情。
感谢您的时间!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.