Operowanie na plikach w Pythonie

Wczytywanie treści z pliku

Najprostszy sposób to:
text = open('nazwa_pliku').read()
print text
Dla plików binarnych:
text = open('plik_binarny', 'rb').read()
print text
Jednakże nie jest to metoda bezpieczna. Dobry skrypt powinien zamykać połączenie z plikiem zaraz po zakończeniu operowania na nim:
plik = open('nazwa_pliku')
try:
	tekst = plik.read()
finally:
	plik.close()

print tekst
Po wykonaniu kodu w bloku "try" zostanie wykonany kod z bloku finally - zamknięcie połączenia z plikiem, nawet w przypadku błędów w czasie operacji na pliku.

Pisanie do pliku

Naprostszy sposób pisania danych tekstowych i binarnych to:
open('plik_do_zapisu', 'w').write("tekst")
open('plik_binarny_do_zapisu', 'wb').write("dane binarne")
Chociaż tak jak w przypadku wczytywania lepszym rozwiązaniem będzie:
plik = open('plik', 'w')
plik.write("tresc")
plik.close()
W przypadku gdy mamy listę (lub inną sekwencję) napisów to wszystkie możemy zapisać do pliku poprzez metodę writelines:
lista = ["bla ", "bla ", "yyy "]

plik = open('plik', 'w')
plik.writelines(lista)
plik.close()
W przypadku otwierania pliku w trybie "w" lub "wb" dane z tego pliku (jeżeli isnieje i ma dane) są usuwane. By dopisać dane należy użyć odpowiednio trybu "a" lub "ab".

Zamiana fragmentu tekstu w pliku

zrodlo = open('nazwa_pliku').readlines()
cel = open('nazwa_pliku', 'w')
for s in zrodlo:
	cel.write(s.replace("co zamienić", "na co"))
cel.close()
Kod ten otwiera plik źródłowy a następnie iterujemy go wierszami i każdy wiersz poddajemy działaniu metody replace a następnie zapisujemy do pliku docelowego.

Pobieranie określonego wiersza z pliku

import linecache
wiersz = linecache.getline('NAZWA PLIKU', NUMER_WIERSZA)
print wiersz

Zliczanie wierszy w pliku

Na małe pliki wystarczy prosty kod:
count = len(open('plik', 'rU').readlines())
print count
Lecz w przypadku większych plików znacznie wydajniejsze będzie:
#!/usr/bin/env python
count = -1
for count, wiersz in enumerate(open('plik', 'rU')):
	pass
count += 1

print count
RkBlog

Podstawy Pythona, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact