Redaktor:Liso/Užitočné pythoniny
V tomto clanku budem mozno uskladnovat nejake tie pythoniny pouzitelne napr. v automatickych upravach textov.
Neexistuje ziadna zaruka, ze akykolvek script posluzi prave vasim cielom! . Nie je ani ziadna zaruka, ze je ktorykolvek skript optimalne nakodovany!
#vytiahnutie stranok v ktorych je pouzita (embeded) sablona
import mechanize
import urllib
import re
br=mechanize.Browser()
br.set_handle_robots(False)
def get_embedy(meno):
addr=u'http://sk.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle='+urllib.quote(meno)+u'&eilimit=500&format=txt'
for line in br.open(addr):
hladane='^.*\[title\] \=\> '
if re.search(hladane, line)!=None:
yield re.sub('\n*$', '', re.sub(hladane, '', line))
def pouzitie_sablony(meno_sablony, meno_stranky):
text=get_page(meno_stranky)
s=re.search('\{\{'+meno_sablony+'.*?\}\}', text,re.M|re.S|re.I)
while s:
yield s.group()
text=text[s.end():]
s=re.search('\{\{'+meno_sablony+'.*?\}\}', text,re.M|re.S|re.I)
zistovanie hlasovacieho prava
[upraviť | upraviť zdroj]import re
akaka=re.compile( '\([ \n\t]*?\[user\] \=\> .*?\)', re.S)
import mechanize
br=mechanize.Browser()
br.set_handle_robots(False)
def zisti(meno, start, end, namespace='all', vytlac=False):
if namespace=='all':
addr='http://sk.wikipedia.org/w/api.php?action=query&list=usercontribs&ucuser='+meno+'&format=txt&ucprop=title|timestamp&uclimit=500&ucstart='+start+'&ucend='+end+'&ucdir=older'
else:
addr='http://sk.wikipedia.org/w/api.php?action=query&list=usercontribs&ucuser='+meno+'&format=txt&ucprop=title|timestamp&uclimit=500&ucstart='+start+'&ucend='+end+'&ucdir=older&ucnamespace='+str(namespace)
text=br.open(addr).readlines()
if vytlac:
print text
a=akaka.findall("".join(text))
return meno, len(a)
priklad pouzitia (zistujeme pocet editov za dva mesiace v hlavnom mennom priestore pre vsetkych nasich sucasnych adminov):
zstart='20080718000000'
zend='20080518000000'
hlasujuci=['Adrian', 'Atomique', 'Bebe', 'Bronto', 'Bubamara','Dudo','Helix84','Jano_spoza_mláky','Liso','Maros','Matros','Metju','Mo-Slimy','Ondrejk','Otm','Palica','Peko','Prskavka','Rádiológ','Robzle','Stibium','Valasek','Wizzard', ]
for i in hlasujuci:
a,b=zisti(i, zstart, zend, '0')
print a,b
Vystup:
Adrian 383 Atomique 0 Bebe 0 Bronto 500 Bubamara 403 Dudo 1 Helix84 1 Jano_spoza_mláky 1 Liso 230 Maros 1 Matros 0 Metju 0 Mo-Slimy 69 Ondrejk 16 Otm 358 Palica 0 Peko 500 Prskavka 13 Rádiológ 3 Robzle 500 Stibium 7 Valasek 0 Wizzard 500
Poznamky:
- neda to viac ako 500, kvoli limitu v api.php!
- hlavny priestor je '0'
- datum je vo formate yyyymmddhh24miss
projekt osud
[upraviť | upraviť zdroj]projekt potreboval preprcat subor a v nom nahradzat viacnasobne prazdne riadky, 4 ciferne roky linkom (1234 -> [[1234]]) plus prehodit ozatvorkovane "rod. XY" za priezvisko.
import sys
import re
subor= "osudbb.txt"
f=file(subor, 'r')
line=f.read(5000)
line2=re.sub(r'([^\[])(\d\d\d\d)', r'\1[[\2]]',line) # nahrad roky linkom
line2=re.sub(r'\'\'\'(.*?)( \(.*?\))(.*?)\'\'\'', r"'''\1\3\2'''", line2) # prehod rodena dozadu v nazvoch
line2=re.sub(r'\'\'\'(.*?)( \(.*?\))(.*?\'\'\')', r"'''\1\3\2", line2) # prehod rodena dozadu v nazvoch
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'\n{3,}', r'\n\n', line2) # nahrad dva prazdne riadky jednym
# following code added by Wizzard
line2=re.sub(r'==\n{2,}', r'==\n', line2) # Zivotopis
line2=re.sub(r'.\n==', r'.\n\n==', line2) # Dielo a pod.
line2=re.sub(r"}}\n''", r"}}\n\n''", line2) # Oddelenie boxu
line2=re.sub(r"{{Osud na", r"\n{{Osud na", line2) # Oddelenie sablony
line2=re.sub(r"pravu}}", r"pravu}}\n", line2) # Oddelenie sablony
line2=re.sub(r" r\.", r" roku", line2) # r. -> roku
line2=re.sub(r" R\.", r" Roku", line2) # R. -> Roku
# posledne zmeny
line2=re.sub(r'([\w\.\,\;\"\'\!\?\)\(\[\]]\s*)\n(\w)', r'\1 \2', line2)
line2=re.sub(r'([\w\.\,\;\"\'\!\?\)\(\[\]]\s*)\n (\w)', r'\1 \2', line2)
line2=re.sub(r'(\n\'\'\'.*?\*.*?)(\[\[\d\d\d\d\]\])(.*)', r'\1\2,\3', line2)
line2=re.sub(r'(\n\'\'\'.*?†.*?)(\[\[\d\d\d\d\]\])(.*)', r'\1\2,\3', line2)
# nahradenie ciselnych datumov
line2=re.sub(r'(\d{1,2}\.)1\.', r'[[\1 január]]a ',line2) # nahrad januarove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)2\.', r'[[\1 február]]a ',line2) # nahrad februarove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)3\.', r'[[\1 marec|\1 marca]] ',line2) # nahrad marcove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)4\.', r'[[\1 apríl]]a ',line2) # nahrad aprilove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)5\.', r'[[\1 máj]]a ',line2) # nahrad majove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)6\.', r'[[\1 jún]]a ',line2) # nahrad junove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)7\.', r'[[\1 júl]]a ',line2) # nahrad julove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)8\.', r'[[\1 august]]a ',line2) # nahrad augustove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)9\.', r'[[\1 septembra|\1 september]] ',line2) # nahrad septembrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)10\.', r'[[\1 október|\1 októbra]] ',line2) # nahrad oktobrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)11\.', r'[[\1 november|\1 novembra]] ',line2) # nahrad novembrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)12\.', r'[[\1 december|\1 decembra]] ',line2) # nahrad decembrove ciselne datumy
print line2 ,
f.close()
Unixová verzia:
# -*- coding: utf-8 -*-
import sys
import re
subor= "OSUDBB.TXT"
f=file(subor, 'r')
line=f.read(32768)
line2=re.sub(r'([^\[])(\d\d\d\d)', r'\1[[\2]]',line) # nahrad roky linkom
line2=re.sub(r'\'\'\'(.*?)( \(.*?\))(.*?)\'\'\'', r"'''\1\3\2'''", line2) # prehod rodena dozadu v nazvoch
line2=re.sub(r'\'\'\'(.*?)( \(.*?\))(.*?\'\'\')', r"'''\1\3\2", line2) # prehod rodena dozadu v nazvoch
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[(\d\d\d\d)\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r"[\x0D\x0A]{3,}", r"\n\n", line2) # nahrad dva prazdne riadky jednym
# following code added by Wizzard
line2=re.sub(r"==[\x0D\x0A]{2,}", r"==\n", line2) # Zivotopis
line2=re.sub(r".\x0D\x0A==", r".\n\n==", line2) # Dielo a pod.
line2=re.sub(r"}}\x0D\x0A''", r"}}\n\n''", line2) # Oddelenie boxu
line2=re.sub(r"{{Osud na úpravu}}", r"\n{{Osud na úpravu}}\n", line2) # Oddelenie sablony
line2=re.sub(r" r\.", r" roku", line2) # r. -> roku
line2=re.sub(r" R\.", r" Roku", line2) # R. -> Roku
line2=re.sub(r" hl\.", r" hlavný", line2) # hl. -> hlavný
line2=re.sub(r" Hl\.", r" Hlavný", line2) # Hlavný. -> hlavný
# nahradenie ciselnych datumov
line2=re.sub(r'(\d{1,2}\.)1\.', r'[[\1 január]]a ',line2) # nahrad januarove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)2\.', r'[[\1 február]]a ',line2) # nahrad februarove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)3\.', r'[[\1 marec|\1 marca]] ',line2) # nahrad marcove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)4\.', r'[[\1 apríl]]a ',line2) # nahrad aprilove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)5\.', r'[[\1 máj]]a ',line2) # nahrad majove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)6\.', r'[[\1 jún]]a ',line2) # nahrad junove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)7\.', r'[[\1 júl]]a ',line2) # nahrad julove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)8\.', r'[[\1 august]]a ',line2) # nahrad augustove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)9\.', r'[[\1 septembra|\1 september]] ',line2) # nahrad septembrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)10\.', r'[[\1 október|\1 októbra]] ',line2) # nahrad oktobrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)11\.', r'[[\1 november|\1 novembra]] ',line2) # nahrad novembrove ciselne datumy
line2=re.sub(r'(\d{1,2}\.)12\.', r'[[\1 december|\1 decembra]] ',line2) # nahrad decembrove ciselne datumy
print line2 ,
f.close()
pouzitie: Script ulozime do suboru. Napr. s menom wikiroky.py a potom (ak mame nainstalovany python a zdrojovy subor sa vola tak ako je to v scripte :) spustime:
python wikiroky.py > vystup.txt
v subore vystup.txt by sme mali mat spracovany vysledok. Nezabudnite vzdy skontrolovat!!! Program nikdy nedokaze osetrit vsetky mozne pripady co sa v nom mozu vyskytnut! :)