Как я могу узнать, что конкретный параметр шаблона индекса пуст по 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
Другие вопросы по тегам