将明文文档解析为python数组

时间:2013-11-26 22:26:40

标签: python parsing text-parsing

我在python中给出了这种格式的文本文件(数值可以是任何小数值):

'Document1',[
    'words_list1',[  
        'word1',[  
            'value1', 4,  
            'value2', 50],  
        'word2',[  
            'value1', 2,  
            'value2', 30], 
         ...
        'wordx',[  
            'value1', 1,  
            'value2', 9]]],
 'Document2',[
    'words_list2',[  
        'word1',[  
            'value1', 1,  
            'value2', 4],  
        'word2',[  
            'value1', 6,  
            'value2', 99], 
         ...
        'wordx',[  
            'value1', 22,  
            'value2', 92]]],
 ...

 'Documentx',[
    'words_listx',[  
        'word1',[  
            'value1', 1,  
            'value2', 4],  
        'word2',[  
            'value1', 6,  
            'value2', 99], 
         ...
        'wordx',[  
            'value1', 22,  
            'value2', 92]]] 

我想通过文档,单词和值将其解析为python数组(即我希望能够通过以下方式访问每个值:array_name [document#] [word#] [value#]。

任何有关我如何处理此事的帮助都会非常有用 - 我是python的新手,并且不确定是否有任何库可以帮助我这样做。

由于

4 个答案:

答案 0 :(得分:1)

图书馆不需要eval

doc = """'Document1',[
            'words_list1',[
                'word1',[
                     'value1', 4,
                     'value2', 50],
                 'word2',[
                     'value1', 2,
                     'value2', 30],
                 'wordx',[
                     'value1', 1,
                     'value2', 9]]]"""
>>> d = eval('[{}]'.format(doc))
>>> d
['Document1', ['words_list1', ['word1', ['value1', 4, 'value2', 50], 'word2', ['value1', 2, 'value2', 30], 'wordx', ['value1', 1, 'value2', 9]]]]

并转换为dict,由@JoranBeasley提供

def to_dict(l):
    if not isinstance(l[1], list):
       return dict(zip(*[iter(l)]*2))
    rv = zip(*[iter(l)]*2)
    return {k: to_dict(v) for k, v in rv}

>>> to_dict(d)
{'Document1': {'words_list1': {'word1': {'value2': 50, 'value1': 4}, 'wordx': {'value2': 9, 'value1': 1}, 'word2': {'value2': 30, 'value1': 2}}}}

答案 1 :(得分:1)

您可以将文件加载到python中,如下所示:

text = open('txt_filename').read()
data = eval('[' + text + ']')

然后你可以统计数据以获得你想要的东西

答案 2 :(得分:0)

word_dic = eval(open("word.txt").read())

答案 3 :(得分:0)

您可以使用Python中的dict来完成此操作。 这是简单的迭代版本:

txt = [ \
    'Document1',[
    'words_list1',[
        'word1',[
            'value1', 4,
            'value2', 50],
        'word2',[
            'value1', 2,
            'value2', 30],
        'wordx',[
            'value1', 1,
            'value2', 9]]],
    'Document2',[
    'words_list2',[
        'word1',[
            'value1', 1,
            'value2', 4],
        'word2',[
            'value1', 6,
            'value2', 99],
        'wordx',[
            'value1', 22,
            'value2', 92]]],
    'Documentx',[
    'words_listx',[
        'word1',[
            'value1', 1,
            'value2', 4],
        'word2',[
            'value1', 6,
            'value2', 99],
        'wordx',[
            'value1', 22,
            'value2', 92]]]]

d = {}
for i in xrange(0,len(txt),2):
    dls = txt[i+1]
    d2 = {}
    for j in xrange(0,len(dls),2):
        wds = dls[j+1]
        d3 = {}
        for k in xrange(0,len(wds),2):
            vls = wds[k+1]
            d4 = {}
            for m in xrange(0,len(vls),2):
                d4[vls[m]] = vls[m+1]
            d3[wds[k]] = d4
        d2[dls[j]] = d3
    d[txt[i]] = d2

<强>结果:

>>> d['Documentx']
{'words_listx': {'word1': {'value2': 4, 'value1': 1}, 'wordx': {'value2': 92, 'value1': 22}, 'word2': {'value2': 99, 'value1': 6}}}

>>> d['Documentx']['words_listx']
{'word1': {'value2': 4, 'value1': 1}, 'wordx': {'value2': 92, 'value1': 22}, 'word2': {'value2': 99, 'value1': 6}}

>>> d['Documentx']['words_listx']['word1']
{'value2': 4, 'value1': 1}

>>> d['Documentx']['words_listx']['word1']['value1']
1