问题描述
我正在尝试构建一个 Python 程序,该程序将解析来自 Universe 数据库的转换代码。这些转换代码是编码大量信息的高度密集的字符串,我正在努力开始。转换代码的不同排列可能有数十万种(虽然我没有计算过)。
我对 argparse
很熟悉,但是我无法想出一种使用 argparse
处理这种解析的方法,而且我的 Google-fu 还没有想出任何其他方法解决方案。
最初,我懒惰的工作只是对最常见的转换代码进行字典查找,但是现在我们使用这个 Python 程序来获取更多数据,维护每个单独的转换代码变得非常繁琐。
例如,日期转换代码可能采用以下形式:
- 日期:
D[n][*m][s][fmt[[f1,f2,f3,f4,f5]]][E][L]
,例如D2/
或D4-2/RM
- 日期时间:
DT[4|D|4D|T|TS|Z][;timezone]
,例如DTZ
或DT4;America/Denver
- 日期时间 ISO:
DTI[B][R|W][S][Z][2|1|0][;[timezone|offset]]
,例如DTIBZ2
或DTIR;America/Denver
还有一堆其他的转换代码,参数同样复杂。
我的最终目标是能够将 Universe 的字符串数据转换为适当的 Python 对象并再次返回,为此,我需要了解这些转换代码。
如果有帮助,我不需要验证这些转换代码。一旦它们被设置在数据库中,它们就会在那里得到验证。
解决方法
我建议您使用 readnamedfields/writenamedfields 方法,这将返回 OCNV 数据,当您回写时,它会处理 ICONV。
导入u2py 帮助(u2py.File.readnamedfields) u2py 模块中函数 readnamedfields 的帮助:
readnamedfields(self,*args) F.readnamedfields(recordid,fieldnnames,[lockflag]) -> new DynArray 对象——按文件中记录的名称读取指定字段
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