我怎么知道 pywikibot 的特定索引模板参数为空?

How can i know that a specific Index template parameter is empty by pywikibot?

我正在尝试填写 its Index Wikisource page 中一本书的页码。下面的代码在具体的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')

您可以使用 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 解析模板还不够好(使用 textlib 中的 'extract_templates_and_params_regex_simple' 和 'glue_template_and_params')。

我的解决方案终于用上了——mwparserfromhell。 这个库在尝试 parse/change 模板(及其参数)时更方便。

您的代码中存在潜在问题,您没有搜索任何模板,因此如果两个模板以某种方式使用相同的参数,您将更改两者(您仍然可以忽略它,但 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