我想在一个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
我可以在我的代码中改变什么来获得上述输出?
撇开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