Zdravim, pujdu hned na vec, mam .txt soubor s obsahem napr:
-------------------------------------------------------------------------
---bladsasda text: ahoj obsah: cau.cau pripona: txt blasdadsbla ---
---blaasdasdla bla text: ahoj1 obsah: cau.cau1 pripona: txt blaasdasdbla ---
---blasdasd bla bla text: ahoj2 obsah: cau.cau2 pripona: txt bla asdasda ---
-------------------------------------------------------------------------
a chtel bych vytvorit do druheho souboru toto:
ahoj,cau.cau,txt
ahoj1,cau.cau1,txt
ahoj2,cau.cau2,txt
proste aby se vzala jen hodnota za "text: ", "obsah: " a "pripona: "
diky moc...
Fórum › Python
Extrahovani zvolenych udaju z .txt souboru
Nejjednodušší řešení bude použití modulu re: http://www.py.cz/RegularniVyrazy, http://docs.python.org/lib/module-re.html
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Mě by jen zajímalo, k čemu to bude dobrý ... pokud je to jen nějaká maličkost, tak budou reguláry stačit, ale pokud bude množství dat hodně velký, tak by bylo vhodný napsat parser (pravděpodobně máš pevně danou strukturu souboru), protože by jinak mohlo docházet ke ztrátě výkonu.
Dušan Janošík | web: djanosik.cz, @djanosik
# -*- coding: cp1250 -*-
# jasné
import re
# dá se jistě načíst i ze souboru
text="""---bladsasda text: ahoj obsah: cau.cau pripona: txt blasdadsbla ---
---blaasdasdla bla text: ahoj1 obsah: cau.cau1 pripona: txt blaasdasdbla ---
---blasdasd bla bla text: ahoj2 obsah: cau.cau2 pripona: txt bla asdasda ---"""
# "text:" - hledá slovo "text" následované dvojtečkou
# "*" - předchozí znak se může libovolněkrát opakovat
# " *" - mezera se může libovolněkrát oprakovat
# \w - jedno písmeno, jakékoliv
# \w+ - písmeno se může libovolněkrát opakovat, nejméně však jednou - jinými slovy je to "slovo"
# (\w+) - bude zahrnuto do výsledku hledání jako např. skupina 1 = vyskyt.group(1)
# "obsah: *" - dále musí následovat slovo "obsah", pak dvojtečka a následovaný libovolným počtem mezer
# (\w+\.\w+) - dve slovo oddělená tečkou, ve výsledích to bude skupina 2
# atd. atd.
vzor="text: *(\w+) *obsah: *(\w+\.\w+) *pripona: *(\w+)"
# finditer postupně nalézá všechny výskyty v textu - v tomto případě po řádcích
for vyskyt in re.finditer(vzor, text):
# vytiskne skupinu 1 (to co je ve vzoru v první závorce), skupinu 2 i 3
print vyskyt.group(1)+","+ vyskyt.group(2)+","+ vyskyt.group(3)
# zápis do souboru snad zvládneš
Comments: obdivuju machry z abclinux.cz, kterí regulární výrazy, daleko složitější, smaží z hlavy. Mě to vždy trochu času zabere, už jsem to zase nějaký ten měsíc nedělal.
Komentáře do textu přidávám pro ty, kdo by snad chtěli víc než jen copy & paste. At slouží.
P.S. tady je to hezky barevně: http://www.pastebin.cz/show/1840
EDIT: opraveny poznámky, jen zde, na pastebin.cz původní verze.
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 4 hosté
Podobná vlákna
Extrahovani zvolenych udaju z .txt souboru — založil JohnyD
Upload souboru na FTP server bez přihlašovacích údajů. — založil Nechda
Export do txt souboru — založil matouch
Zapisování od txt souboru — založil M4rty32
Zápis do .txt souboru — založil Pavel
Moderátoři diskuze