簡體   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