繁体   English   中英

使用 Json.load 更改我的配置文件的顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM