@Vitaliy_dzen

Как лаконично переписать код на python?

текст который нужно распарсить:
from pyparsing import *

texta = '''<RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#"
         xmlns:NC="http://home.netscape.com/NC-rdf#"
         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <RDF:Description RDF:about="urn:scrapbook:item20200711150730"
                   NS1:id="20200711150730"
                   NS1:create="20200711150730"
                   NS1:title="Делаем из Vim-а конфетку / Хабр"
                   NS1:chars="UTF-8"
                   NS1:source="https://habr.com/ru/post/468265/"
                   NS1:comment=""
                   NS1:lock=""
                   NS1:type=""
                   NS1:icon="resource://scrapbook/data/20200711150730/favicon-16x16.png"
                   NS1:modify="20200711150804" />
  <RDF:Seq RDF:about="urn:scrapbook:item20200704081851">
    <RDF:li RDF:resource="urn:scrapbook:item20200704081900"/>
    <RDF:li RDF:resource="urn:scrapbook:item20200711150730"/>
  </RDF:Seq>'''


код парсера:
ns_id_p = Literal("NS1:id=")
pars = ns_id_p + Suppress('"') + Word(nums) + Suppress('"')
xx = pars.searchString(texta)
xxx = xx[0]
yyy = xxx[1]
print('xx ', xx)
print('xxx ', xxx)
print('yyy ', yyy)


вывод:
xx  [['NS1:id=', '20200711150730']]
xxx  ['NS1:id=', '20200711150730']
yyy  20200711150730


как получить значение yyy более лаконично в стиле python
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
@dmshar
Лаконичность не должна быть самоцелью. Да и потом, что значить - "лаконично"? Меньше строк в коде? Меньше символов?

Можно написать - если вопрос именно "как получить значение yyy" - вот так:

print('yyy ', (Literal("NS1:id=") + Suppress('"') + Word(nums) + Suppress('"')).searchString(texta)[0][1])


Лаконично. Вот только точно как минимум хуже читаемо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Смотря какая задача и какие ограничения. Если ты просто ищешь строки вида
NS1:id="цифры"
то тут и регулярки подойдут. Например, re.compile('NS1:id="(\d+)"').
А вот если тебе нужно потом работать со структурой xml документа, то нужно использовать lxml.ElementTree.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы