[python] Vytváření textových souborů, prosím, poraďte
Jarek Krcmar
krcmar1 na volny.cz
Neděle Červen 1 17:29:03 CEST 2008
Zdravím,
omlouvám se za to, že jsem skopíroval obsah desáté lekce. Mě, jakožto
nevidomého zajímá text a nikoli grafika, proto bych rád vytvořil textový
soubor, který by bylo možné číst přímo z klávesnice.
Nevím ale, jak to mám udělat, protože popis zadání se nái zdá poněkud
nejasný.
Jakmile jsem si totiž vytvořil textový soubor, který je v té lekci zmíněn,
tak mi vyskočí hláška o tom, že jde o Syntax error.
Jarek
Tak, konečně se dostáváme k práci se soubory. Ukážeme si, jak ukládat a
načítat data
do a ze souborů.
Telefonní seznam 3.
T
ak, konečně se dostáváme k práci se soubory. Ukážeme si, jak ukládat a
načítat data
do a ze souborů.
Trocha teorie
Soubory na disku nejsou nic jiného než skládka čísel a znaků. Téměř všechny
programovací
jazyky defaultně pracují s obyčejnými textovými soubory bez češtiny. I v
Python
u existují funkce na vytvoření souboru nebo složky, přejmenování, kopie,
přesun,
zjištění data a velikosti, apod. O těch ale někdy jindy.
Začínáme
Vyzkoušejte:
nazev='MujPrvniSoubor.txt'
soubor=file(nazev,'w')
vstup=raw_input('Zadej text: ')
soubor.write(vstup)
soubor.close()
Následně si v adresáři, kde máte tento script uložen, najděte soubor s
nazvem 'MujPrvniSoubor.txt'
a prohlédněte si jeho obsah. Vyzkoušejte několikrát. Ten původní obsah by se
měl
vždy ztratit a bude tam jen to poslední, co jste zadali....
Pokud zadáte české znaky, soubor se pak uloží v tom kódovaní, ve kterém jste
to zadávali.
Lépe řečeno, které máte nastaveno ve vašem prostředí. Já konkrétně mám Latin
II (cp852)
pod černým pythonovským shellem. Při prohlížení PSPadem (na Linuxu a Macu
vhodným
editorem, který umí s různými kódování pracovat), když si nastavíte správně
kodovaní
češtiny, uvidíte správný zápis.
Tři druhy přístupu
Obecně mohou být soubory otevřeny ve třech režimech: pro čtení, pro zápis
(nový soubor)
a pro přidávání. Jednotlivé režimy se od sebe odlišují druhým parametrem ve
funkci
file(). První parametr je samozřejmě název souboru.
čtení: 'r' jako 'read'
zápis: 'w' jako 'write' (vznikne vždy nový soubor, pokud již existoval,
přepíše se)
přidání: 'a' jako 'append' (pokud neexistuje, vytvoří se nový)
Metody souborů
Jak jsem již v předchozích lekcích naznačoval, metoda je funkce přiřazená
vždy k
proměnné (objektu). Zápis je objekt tečka metoda (případné parametry).
soubor.read() - přečtení celého souboru (samozřejmě v režimu 'r')
soubor.write(řetězec) - zápis na disk (v režimu 'w')
soubor.flush() - vynucený zápis na disk ještě před close()
soubor.close() - uzavření souboru
Upozorňuji, že všechna data se
fyzicky
do souboru zapíšou až s metodou close(). Předtím zůstávají ve vnitřní
paměti - je
to z důvodu rychlosti. Chceteli donutit zápis na disk před close(), použijte
flush().
Čtení souboru řádek po řádku
Cyklus for se v
Python
u uplatní velmi názorně i u souborů. Přidejte si ručně do vašeho souboru
několik
řádek textu. Nezapomeňte uložit a vyzkoušejte:
soubor=file('MujPrvniSoubor.txt','r')
cisloRadku=0
for radek in soubor:
cisloRadku=cisloRadku+1
print "Radek", cisloRadku,":", radek,
soubor.close()
Čárku za 'radek' jsem udělal schválně. Víte proč? Vyzkoušejte...
Ukládání čísel
Chceme-li uložit obyčejná čísla, musíme je převést na text, protože funkce
write()
přijímá jen textové proměnné. Vyzkoušejte:
soubor=file('MujPrvniSoubor.txt','a')
posloupnost=[5,48,74,89,544]
for cislo in posloupnost:
cisloText=str(cislo)
soubor.write(cisloText+', ')
soubor.write('\n')
soubor.close()
Toto je základ pro práci se soubory. Je třeba si to řádně několikrát
vyzkoušet a
pochopit. Když něco nefunguje tak to nesmí být důvod k tomu "já na to
kašlu!", ale
spíše "sakra, to by bylo abych na to nepřišel!". Zkoušejte, experimentujte,
ptejte
se a čtěte chybové hlášky. O těch by mohla být jedna z dalších lekcí.
Úkol
Zadání
Úkol je více než jasný. Uložte data z Vašeho telefonního seznamu do souboru.
Pošlete
mi program i uložená data. Uložená data vložte jako komentář na konec
scriptu.
Extra pro pokročilé
Načtěte se souboru data vašeho telefonního seznamu. Je to mnohem složitější
než pouhé
uložení. Budete muset číst řádku po řádce a v řádku nějak od sebe oddělovat
hodnoty,
které tam jsou. Připomínám, že načtený řádek není nic jiného, než jeden
řetězec.
Poznámka
Úkoly známkuji a opravuji skutečně rád a nevím, jestli úkoly, které dávám
jsou moc
těžké, nebo moc lehké, nebo to nikdo nečte, protože žádné vypracované úkoly
nedostávám.
Pavel Kosina
Autor programuje v Pythonu.
Další informace o konferenci Python