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

2024-05-18 10:09:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一本书的页码填到its Index Wikisource page。下面的代码在特定的pageNumber参数中编写得很好。 如果页面是空的,则看起来很好。但是如果我再运行一次代码,由于连接,67变成了6767。我怎么知道pageNumber参数('|Number of pages=')是空的?或者如果参数已经填充,我如何在代码中设置skip选项。你知道吗

编写代码;-

#!/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')

Tags: of代码number参数indexpagepagesits
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解析模板还不够好(从textlib使用“extract\u templates\u and \u params\u regex\u simple”和“glue\u template\u and \u params”)。你知道吗

我的解决方案最终使用了-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

相关问题 更多 >