【问题标题】:How can i know that a specific Index template parameter is empty by pywikibot?我如何知道 pywikibot 的特定索引模板参数为空?
【发布时间】:2018-03-17 10:53:51
【问题描述】:

我正在尝试在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')

【问题讨论】:

    标签: python pywikibot


    【解决方案1】:

    我也遇到过类似的情况, 在我看来,用 pywikibot 解析模板还不够好(使用 textlib 中的 'extract_templates_and_params_regex_simple' 和 'glue_template_and_params')。

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

    您的代码中存在潜在问题,您没有搜索任何模板,因此如果两个模板将使用相同的参数,您将同时更改两者(您仍然可以忽略它,但 jfyi)。

    使用 mwparserfromhell + pywikibot 就像(使用代码中的“页面”):

    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
    

    【讨论】:

      【解决方案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,因为它对此有更好的支持。

      【讨论】:

      • 现在我正在使用python3。上面的代码很好地跳过。确实谢谢。替换的正则表达式是什么。因为,很少有书可以被新数据纠正。
      • 代码的正则表达式适用于数字。我的母语是泰米尔语。如果参数是非拉丁语,我应该使用什么正则表达式来设置跳过选项。?例如,'|Category= மின்னூல்கள்'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2011-09-19
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多