在python 2.6中查找xml标签中文本的唯一出现次数。

问题描述 投票:1回答:1

我想在一个xml标签中寻找文本的唯一出现次数,并将其显示在csv文件的某一列中。

我的Xml文件看起来有点像这样。

<start>
<tag1> ..... </tag1>
<main> 
<number> 685 </number>
<text> hi..some text...[]para01 |...</text>
</main>
<main> 
<number> 67 </number>
<text> hi..some text...[]para01 |..</text>
</main>
<main> 
<number> 75 </number>
<text> hi..some text...[]para02 |...</text>
</main>
<main> .......

我想知道括号后的文字出现的次数(在每个主标签中),例如para01出现了2次,para02出现了1次,以此类推。

我试了一下。

tree = ET.parse(file)
root=tree.getroot()
with open(csvfile, 'a') as f:
    writer=csv.writer(f, delimiter=', ')
    writer.writerow(['number', 'para', 'count'])
    lis = []
    for child in root.findall('main'):
        num = child.find('number').text
        para = re.findall(r"\[] (.*?)\| ", child.find('text').text)
        lis.append("" .join(para))
        res = dict((i, lis.count(i)) for i in lis)
        for key, value in res.items():
           r.append([key, value])
        r = [num, para, [key, value])
        writer.writerow(r)

但是我得到的结果似乎和我想要的很不一样。

number   para.     Count
685      para01   para01:2
67       para01   para01:2
75       para02   para02:1

我可以在我的代码中改变什么来获得上述输出?

list csv dictionary xml-parsing python-2.6
1个回答
0
投票

撇开csv文件不谈 为了得到你的目标行 试试这样的方法:

trgt_txts = root.findall(".//text")
trgt_nums = root.findall(".//number")
txts = []
nums = []
for txt in trgt_txts:
    target = txt.text.split(']')[1].split(' |' )[0]
    txts.append(target)
for n in trgt_nums:
    nums.append(n.text.strip())
for par in set(txts):
    for p,n in zip(txts,nums):
        if p == par:
            print(n,par,par+':'+str(txts.count(par)))

输出:

75 para02 para02:1
685 para01 para01:2
67 para01 para01:2
© www.soinside.com 2019 - 2024. All rights reserved.