Как я могу узнать, что конкретный параметр шаблона индекса пуст по pywikibot?
Я пытаюсь заполнить номера страниц Книги на странице индекса Викиресурса. Следующий код хорошо пишет в конкретном параметре pageNumber. Если страница пуста, она выглядит нормально. Но если я запускаю код в другой раз, из-за конкатенации 67 становится 6767. Как я могу узнать, что параметр pageNumber ('|Number of pages='
) пустой? или Если параметр уже заполнен, как я могу установить параметр пропуска в коде.
Код написания;
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pywikibot
indexTitle = 'அட்டவணை:தமிழ் நாடகத் தலைமை ஆசிரியர்-2.pdf'
indexPages = '67'
site1 = pywikibot.Site('ta', 'wikisource')
page = pywikibot.Page(site1, indexTitle)
indexTitlePage = page.text.replace('|Number of pages=','|Number of pages='+indexPages)
page.save(summary='67')
2 ответа
Ты можешь использовать re
- библиотека регулярных выражений для поиска шаблона:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pywikibot
import re
indexTitle = 'அட்டவணை:தமிழ் நாடகத் தலைமை ஆசிரியர்-2.pdf'
indexPages = '67'
site1 = pywikibot.Site('ta', 'wikisource')
page = pywikibot.Page(site1, indexTitle)
print(page.text)
res = re.compile('\|Number of pages= *(\d+)').search(page.text)
if res:
print("number of pages is already assign to %s" % res.group(1))
else:
indexTitlePage = page.text.replace('|Number of pages=','|Number of pages='+indexPages)
page.save(summary='67')
Кроме того, если вы имеете дело с обработкой текста utf8, лучше перейти на python3, так как он имеет гораздо лучшую поддержку для этого.
Я сталкивался с подобной ситуацией: синтаксический анализ шаблонов с помощью pywikibot кажется мне недостаточно хорошим (с использованием "extract_templates_and_params_regex_simple" и "glue_template_and_params" из textlib).
Мое решение наконец-то использовалось - mwparserfromhell. Эта библиотека более удобна при попытке разобрать / изменить шаблоны (и их аргументы).
В вашем коде есть потенциальная проблема, вы не ищете какой-либо шаблон, поэтому, если два шаблона будут использовать один и тот же аргумент, вы измените оба (вы все равно можете игнорировать это, но jfyi).
Использование mwparserfromhell + pywikibot будет похоже на использование (page) из вашего кода:
parsed_mw = mwparserfromhell.parse(page.text)
my_template = parsed_mw.filter_templates(my_template_name)[0] # Taking the first template
my_template.get('Number of pages').value=67
page.text = parsed_mw