簡體   English   中英

解析復雜的基於字符串的配置選項

[英]Parsing complicated string-based configuration options

我正在嘗試構建一個 Python 程序,它將解析來自 Universe 數據庫的轉換代碼。 這些轉換代碼是高度密集的字符串,編碼了大量信息,我正在努力入門。 轉換代碼的不同排列可能有數十萬種(盡管我沒有計算過)。

我熟悉argparse ,但是我想不出一種方法來處理這種用argparse進行的解析,而且我的 Google-fu 也沒有想出任何其他解決方案。

最初,我懶惰的工作是只對最常見的轉換代碼進行字典查找,但現在我們正在使用這個 Python 程序來獲取更多數據,維護每個單獨的轉換代碼變得非常繁瑣。

例如,日期轉換代碼可能采用 forms,如:

  • 日期: D[n][*m][s][fmt[[f1, f2, f3, f4, f5]]][E][L] ,例如D2/D4-2/RM
  • 日期時間: DT[4|D|4D|T|TS|Z][;timezone] ,例如DTZDT4;America/Denver
  • 日期時間 ISO: DTI[B][R|W][S][Z][2|1|0][;[timezone|offset]] ,例如DTIBZ2DTIR;America/Denver

還有一堆其他的轉換代碼,參數同樣復雜。

我的最終目標是能夠將 Universe 的字符串數據轉換為適當的 Python object 並再次轉換回來,為此,我需要了解這些轉換代碼。

如果有幫助,我不需要驗證這些轉換代碼。 一旦將它們設置在數據庫中,就會在那里進行驗證。

我建議您使用 readnamedfields/writenamedfields 方法,這將返回 OCONV 數據,當您寫回時它會處理 ICONV。

import u2py help(u2py.File.readnamedfields) u2py 模塊中關於 function readnamedfields 的幫助:

readnamedfields(self, *args) F.readnamedfields(recordid, fieldnnames, [lockflag]) -> new DynArray object -- 通過文件中記錄的名稱讀取指定字段

fieldnames is a u2py.DynArray object with each of its fields being a name defined in the dictionary file
lockflag is either 0 (default), or [LOCK_EXCLUSIVE or LOCK_SHARED] [ + LOCK_WAIT]

note: if fieldnames contains names that are not defined in the dictionary, these names are replaced by @ID and no exception is raised

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM