Redaktor:Liso/Užitočné pythoniny

z Wikipédie, slobodnej encyklopédie

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!

Wikipédia:WikiProjekt Citácie[upraviť | upraviť zdroj]

#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:

  1. neda to viac ako 500, kvoli limitu v api.php!
  2. hlavny priestor je '0'
  3. 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! :)