繁体   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