Поиск количества уникальных вхождений текста в теге xml в python 2.6 - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь найти количество уникальных вхождений некоторого текста в одном теге 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

Что я могу изменить в своем коде, чтобы получить приведенный выше вывод?

1 Ответ

0 голосов
/ 28 апреля 2020

Отложив аспект 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...