Redaktor:Liso/Užitočné pythoniny

Z Wikipé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!

[úprava] projekt osud

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'([^\[])([0-9][0-9][0-9][0-9])', 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.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod  roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod  roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', 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'([0-9]{1,2}\.)1\.', r'[[\1 január]]a ',line2) # nahrad januarove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)2\.', r'[[\1 február]]a ',line2) # nahrad februarove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)3\.', r'[[\1 marec|\1 marca]] ',line2) # nahrad marcove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)4\.', r'[[\1 apríl]]a ',line2) # nahrad aprilove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)5\.', r'[[\1 máj]]a ',line2) # nahrad majove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)6\.', r'[[\1 jún]]a ',line2) # nahrad junove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)7\.', r'[[\1 júl]]a ',line2) # nahrad julove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)8\.', r'[[\1 august]]a ',line2) # nahrad augustove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)9\.', r'[[\1 septembra|\1 september]] ',line2) # nahrad septembrove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)10\.', r'[[\1 október|\1 októbra]] ',line2) # nahrad oktobrove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)11\.', r'[[\1 november|\1 novembra]] ',line2) # nahrad novembrove ciselne datumy
line2=re.sub(r'([0-9]{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'([^\[])([0-9][0-9][0-9][0-9])', 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.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod  roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod  roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', r'\1\2\3',line2) # vyhod roky link v kategoriach
line2=re.sub(r'(\[\[Kateg.*?)\[\[([0-9][0-9][0-9][0-9])\]\](.*?\]\])', 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'([0-9]{1,2}\.)1\.', r'[[\1 január]]a ',line2) # nahrad januarove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)2\.', r'[[\1 február]]a ',line2) # nahrad februarove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)3\.', r'[[\1 marec|\1 marca]] ',line2) # nahrad marcove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)4\.', r'[[\1 apríl]]a ',line2) # nahrad aprilove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)5\.', r'[[\1 máj]]a ',line2) # nahrad majove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)6\.', r'[[\1 jún]]a ',line2) # nahrad junove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)7\.', r'[[\1 júl]]a ',line2) # nahrad julove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)8\.', r'[[\1 august]]a ',line2) # nahrad augustove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)9\.', r'[[\1 septembra|\1 september]] ',line2) # nahrad septembrove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)10\.', r'[[\1 október|\1 októbra]] ',line2) # nahrad oktobrove ciselne datumy
line2=re.sub(r'([0-9]{1,2}\.)11\.', r'[[\1 november|\1 novembra]] ',line2) # nahrad novembrove ciselne datumy
line2=re.sub(r'([0-9]{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! :)