Python - скопировать атрибуты элемента и вставить в другой текстовый файл - PullRequest
0 голосов
/ 17 октября 2018

У меня есть XML-файл, который выглядит следующим образом

<xml>
  <canvas id="123">
      <child name="somechild" id="1"/>
  </canvas>
  <canvas id="124">
      <child name="somechild" id="2"/>
  </canvas>
  <canvas id="125">
      <child name="somechild" id="3"/>
  </canvas>
</xml>

Я хочу скопировать значение атрибута id холста, который в основном находится внутри <canvas id="COPY THIS VALUE">, и записать их в новый текстовый файл, которыйперечислю их всех так:

123, 1234, 214334, 34234, 34234

спасибо за помощь!

edit ---------

пока я пробовалэто то, что я видел из другого ответа, но оно копирует всю строку идентификатора холста, а не только то, что внутри идентификатора

with open('file.xml') as myfile, open('fileids.xml', 'w') as outfile:
content = myfile.read()
text = re.search(r'canvas id=".*?">', content, re.DOTALL).group()
outfile.write(text)

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете использовать встроенный модуль xml.etree.ElementTree:

import xml.etree.ElementTree as ET
xml = ET.fromstring('''<xml>
  <canvas id="123">
      <child name="somechild" id="1"/>
  </canvas>
  <canvas id="124">
      <child name="somechild" id="2"/>
  </canvas>
  <canvas id="125">
      <child name="somechild" id="3"/>
  </canvas>
</xml>''')
print([node.attrib['id'] for node in xml.findall('.//canvas')])

. Это приводит к выводу:

['123', '124', '125']

Со списком вы можете легко записать элементы в файл.

0 голосов
/ 17 октября 2018

BeautifulSoup - ваш друг

from bs4 import BeautifulSoup
data = BeautifulSoup("""<xml>
  <canvas id="123">
      <child name="somechild" id="1"/>
  </canvas>
  <canvas id="124">
      <child name="somechild" id="2"/>
  </canvas>
  <canvas id="125">
      <child name="somechild" id="3"/>
  </canvas>
</xml>""")

#writing ids to file

file = open('test.txt','w')    
for d in data.find_all('canvas'):
    file.write(d.get('id'))
    file.write('\n')
    print(d.get('id'))
file.close() 

Выход

123
124
125
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...