从一个充满元数据的字典中生成字符串的最python的方法是什么?

2024-10-02 08:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

与创建for循环/嵌套for循环相比,有没有更适合使用元数据字典编写固定宽度字符串的方法?你知道吗

我的意见如下:

{
 't_order': 11112014,
 't_date': 20150101,
 't_external': 'from sample',
 't_mode': 'A',
 'message_id': 'ID01',
 't_value': 123.45
}

我的元词典看起来是这样的:

[{'field': 'message_id',
  'decimalPrecision': '0',
  'isTypeOf': 'C',
  'Length': '8',
  'Level': '0',
  'Start': '1'},
 {'field': 't_mode',
  'decimalPrecision': '0',
  'isTypeOf': 'C',
  'Length': '1',
  'Level': '0',
  'Start': '9'},
 {'field': 't_order',
  'decimalPrecision': '0',
  'isTypeOf': '9',
  'Length': '8',
  'Level': '0',
  'Start': '10'},
 {'field': 't_external',
  'decimalPrecision': '0',
  'isTypeOf': 'C',
  'Length': '25',
  'Level': '0',
  'Start': '18'},
 {'field': 't_date',
  'decimalPrecision': '0',
  'isTypeOf': '9',
  'Length': '8',
  'Level': '0',
  'Start': '43'},
 {'field': 't_value',
  'decimalPrecision': '4',
  'isTypeOf': '9',
  'Length': '18',
  'Level': '0',
  'Start': '51'}]

任何isTypeOf == CstrisTypeOf == 9intStart值是字符串位置的开始,Length是左空格填充的字段长度。数字字段不包含小数点,精度为零。也就是说,给定的样本将显示:

ID01 A11112014from sample 20150101 1234500

有什么比循环/嵌套for语句更有效的方法吗?你知道吗


Tags: sample方法字符串fieldmessagefordatemode
2条回答

我想有更好的方法来做这件事,但这似乎是可行的:

def extract_elem(input_dict, meta_elem):
    val  = input_dict[meta_elem['field']]
    off  = int(meta_elem['Start'])
    flen = int(meta_elem['Length'])
    if meta_elem['isTypeOf'] == 'C':        # String
        return off, val.ljust(flen, ' ')
    if meta_elem['isTypeOf'] == '9':        # Float / Int
        prec = int(meta_elem['decimalPrecision'])
        fmt = "%%.%df" % prec
        val = (fmt % val).replace('.','')
        return off, val.rjust(flen, ' ')

def extract(input_dict, meta_list):
    s = ['' * 200]
    for m in meta_list:
        off, val = extract_elem(_input_dict, m)
        end = off + len(val)
        s[off:end] = val

    return ''.join(s)

print extract(_input_dict, _meta_list)

输出:

ID01    A11112014from sample              20150101           1234500

我强烈建议,for循环将是实现这一点的最python方法。Python倾向于可读性而不是简洁性

复杂总比复杂好

也就是说,如果您的元数据是以关键字作为字段名的dictionary,那么您可以索引到dictionary中并避免嵌套循环。你知道吗

真正的python方法是确保原始记录是由生成器生成的,而不是加载到列表中。你知道吗

相关问题 更多 >

    热门问题