[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