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

时间:2018-03-17 10:53:52

标签: python pywikibot

我想在its Index Wikisource page填写一本书的页码。以下代码在特定的pageNumber参数中写得很好。 如果页面为空,它看起来很好。但是如果我再次运行代码,由于串联67变为6767.我怎么知道pageNumber参数(require 'vendor/autoload.php'; // include Composer's autoloader $client = new MongoDB\Client("mongodb://localhost:27017"); // SELECT * FROM YOUR_TABLE_NAME ; // db.YOUR_COLLECTION_NAME.find({}); $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array()); //SELECT * from YOUR_TABLE_NAME WHERE YOUR_COLUMN = "A" // db.YOUR_COLLECTION_NAME.find({{ YOUR_FIELD: "A" }}); $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array('YOUR_FIELD'=>'A')); //Return the Specified Fields and the _id Field Only //SELECT _id, item,status YOUR_TABLE_NAME from inventory WHERE status = "A" //db.YOUR_COLLECTION_NAME.find( { status: "A" }, { item: 1, status: 1 } ) $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array('status'=>'A'),array('projection' =>array('item'=>TRUE,'status' => TRUE))); //Suppress _id Field //SELECT item, status from YOUR_TABLE_NAME WHERE status = "A" //db.YOUR_COLLECTION_NAME.find( { status: "A" }, { item: 1, status: 1, _id: 0 } ) $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array('status'=>'A'),array('projection' =>array('item'=>TRUE,'status' => TRUE,'_id'=>FALSE))); //SELECT * FROM YOUR_TABLE_NAME LIMIT 10 //db.YOUR_COLLECTION_NAME.find({}).limit(10); $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array(),array('limit'=>10)); //SELECT * FROM YOUR_TABLE_NAME LIMIT 5,10 //db.YOUR_COLLECTION_NAME.find({}).skip(5).limit(10) $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array(),array('skip'=>5,'limit'=>10)); //Suppress _id Field //SELECT item, status from YOUR_TABLE_NAME WHERE status = "A" LIMIT 5,10; //db.YOUR_COLLECTION_NAME.find( { status: "A" }, { item: 1, status: 1, _id: 0 } ).skip(5).limit(10); $result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array('status'=>'A'),array('projection' =>array('item'=>TRUE,'status' => TRUE,'_id'=>FALSE),'skip'=>5,'limit'=>10)); foreach ($result as $entry){ echo "<pre>"; print_r($entry); echo "</pre>"; } )是空的?或者如果参数已经填充,我如何在代码中设置跳过选项。

编写代码; -

'|Number of pages='

2 个答案:

答案 0 :(得分:1)

您可以使用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,因为它有更好的支持。

答案 1 :(得分:1)

我遇到过类似的情况, 使用pywikibot解析模板对我来说似乎不够好(使用textlib中的'extract_templates_and_params_regex_simple'和'glue_template_and_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