Typ je řetězec, který určí, jak se bude se souborem zacházet. Může obsahovat následující hodnoty (podobně jako v jazyku C):
| Typ | Význam |
| 'r' | Soubor bude otevřen pro čtení. Pokud neexistuje, nastane výjimka IOError |
| 'r+' | Soubor bude otevřen pro čtení a zápis. Pokud neexistuje, nastane výjimka IOError. |
| 'w' | Soubor bude otevřen pro zápis. Existující soubor bude zkrácen na nulovou délku, neexistující bude vytvořen. |
| 'a' | Soubor bude otevřen pro zápis na konec souboru. Neexistující soubor bude vytvořen. |
S těmito znalostmi již můžeme napsat funkci, která bude vracet 1 v případě existence souboru a 0 v případě neexistence souboru. Jediný argument funkce je název skoumaného souboru.
>>> def fileexist(nazev):
... try:
... soubor = open(nazev,'r')
... except IOError:
... return 0
... except:
... print 'neocekavana chyba'
... return 0
... else:
... return 1
...
>>> fileexist('/tmp/pokus.txt')
0
Pokud vás překvapily lomítka v názvu souboru, pak vězte, že v
Linuxu je to normální. Proč jsou v DOSu obráceně ví snad jen Bill.
Adresář /tmp je také v každém Linuxu. Pokud pracujete s
jiným operačním systémem, změňte adresář i lomítka dle libosti.
V předchozím příkladě by tedy měl být příkaz soubor.close() před řádekem return 1 (v ostatních případech nebyl soubor otevřen, takže není co zavírat!).
>>> soubor = open('pokus.txt','a')
>>> soubor.write('Hello World')
>>> soubor.close()
Pokud tyto příkazy zadáte dvakrát, bude v souboru pokus.txt
zapsáno Hello WorldHello World. To proto, že v řetězci
'Hello World' není konec řádky (speciální znak '\n').
Prvni radka
Druha radka
Treti radka
Ctvrta radka
Jeho obsah pak zjistíte takto:
>>> try:
... s = open("pokus.txt",'r')
... radky = s.readlines()
... s.close()
... except:
... print 'Chyba prace se souborem'
... else:
... type(radky)
... print radky
... for i in radky:
... print i
...
<type 'list'>
['Prvni radka\n', 'Druha radka\n', 'Treti radka\n', 'Ctvrta radka\n']
Prvni radka
Druha radka
Treti radka
Ctvrta radka
Všiměnte si, že jsou řádky načteny i se speciálním znakem konec
řádku '\n'.
>>> line = 'X'
>>> s = open('pokus.txt',"r")
>>> while line:
... line = s.read(6)
... nacteno = 'Nacteno: %s' % line
... print nacteno,
...
Nacteno: Prvni Nacteno: radka
Nacteno: Druha Nacteno: radka
Nacteno: Treti Nacteno: radka
Nacteno: Ctvrta Nacteno: radka Nacteno:
Nacteno:
>>>
V příkladě jsem využil toho, že prázdný řetězec je chápán jako
false. Za předposledním Nacteno se
schovává znak '\n', za posledním Nacteno je již prázdný
řetězec.
Metoda seek(pocet,pozice) posune aktuální pozici v souboru o pocet bytů a to od místa pozice. Pokud je pocet záporná hodnota, pak se posune pocet bytů pozice nazpět. Pozice je typu int a může nabývat následujících hodnot:
| Hodnota pozice | Význam |
| 0 | Začátek souboru |
| 1 | Aktuální pozice |
| 2 | Konec souboru |
Metodu seek(pocet) je možno použít jen s jedním argumentem, potom se implicitně předpokládá posun od aktuální pozice.
