-2

如果文件是这样的:

OrderedDict
([
 ('activateable', False),
 ('Thisfield', 
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]),
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)])
 ),
('Thisfield2', 
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]),
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)])
 ),
('Thisfield3', 
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]),
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)])
 )
 ('pin', False)
])

...而我只想返回 'Thisfield1, Thisfield2, Thisfield3'?

4

1 回答 1

0

起初我以为你的输入是 Python,但它不是:

  • 它有 Unicode 左右引号 (U+2018/U+2019)
  • 它有不平衡的方括号
  • 之前至少需要一个逗号('pin', False)

因此,鉴于您问题上的标签,这必须是一个 YAML 文档,这意味着它有一个多行纯标量作为内容。当您使用 YAML 解析器加载它时,您将把整个标量加载为一个没有换行符的单个字符串:

OrderedDict ([ ('activateable', False), ('Thisfield', [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]), [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)]) ), ('Thisfield2', [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]), [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)]) ), ('Thisfield3', [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]), [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)]) ) ('pin', False) ])

这不像原始输入文件那样容易解析。

因此,您可能会更轻松地“解析”输入行:

def get_thisfields(fp):
    vals = []
    for line in fp:
        line = line.strip()
        if not line.startswith(u"('This"):
            continue
        vals.append(line.split("'")[1])
    return ', '.join(vals)

print(get_thisfields(open('input.yaml')))

给定您输入的“YAML”文件,get_thisfields()返回:

Thisfield, Thisfield2, Thisfield3

按照你的要求。

于 2018-09-13T04:49:25.883 回答