PYTHON Obsługa plików
Aby móc operować na pliku, niezależnie od tego czy chcemy odczytać z niego informacje czy coś w nim zapiać, musimy go najpierw otworzyć.
open – otwarcie pliku do przetwarzania
Składnia:
mojplik = open(nazwapliku [, metoda][, buforowanie])
Parametry wejściowe metody open to obowiązkowa nazwa pliku oraz opcjonalne: metoda dostępu do pliku oraz buforowanie.
Przykład:
Mamy dany plik tekstowy test.txt o następującej zawartości:
Pierwsza linia pliku Pliku druga linia Linia trzecia pliku Ostatnia pliku linia
Otwórzmy plik do odczytu:
plik = open('test.txt', 'r') print(plik.read()) plik.close()
W rezultacie wypisaliśmy całą zawartość pliku na ekran.
Metody dostępu do pliku
Metoda | Opis |
---|---|
r | Tylko do odczytu. Domyślna opcja |
rb | Tylko do odczytu w formacie binarnym |
r+ | Odczyt + zapis |
rb+ | Odczyt + zapis w formacie binarnym |
w | Zapis |
wb | Zapis w formacie binarnym |
w+ | Odczyt + zapis. Nadpisuje plik jeśli istnieje. Tworzy nowy plik, jeśli nie istnieje. |
wb+ | Odczyt + zapis w formacie binarnym |
a | Dopisani |
ab | Dopisanie w formacie binarnym |
a+ | Odczyt + dopisanie |
ab+ | Odczyt + dopisanie w formacie binarnym |
Metody odczytania zawartości pliku
read
Przykład:
plik = open('test.txt', 'r') zawartosc = plik.read() print(zawartosc) plik.close()
Efekt – odczytana cała zawartość pliku
Pierwsza linia pliku Pliku druga linia Linia trzecia pliku Ostatnia pliku linia
readline
Przykład:
plik = open('test.txt', 'r') x = plik.readline() print(x)
Efekt – odczytana jedna linia z pliku
Pierwsza linia pliku
readlines
Przykład:
plik = open('test.txt', 'r') x = plik.readlines() print(x)
Efekt – odczytane wszystkie linie pliku, umieszczone na liście
['Pierwsza linia pliku\n', 'Pliku druga linia\n', 'Linia trzecia pliku\n', 'Ostatnia pliku linia']
Należy zwrócić uwagę, że linie tekstu zawierają również symbol przejścia do nowej linii \n.
Zapis do pliku
r+
plik = open('test.txt', 'r+') plik.write('Cokolwiek') plik.close()
Efektem jest częściowo nadpisana zawartość pliku:
Cokolwiekku Pliku druga linia Linia trzecia pliku Ostatnia pliku linia
Cokolwiek nadpisało pierwsze 9 znaków w pliku test.txt
a
plik = open('test.txt', 'a') plik.write('ZZZZZ') plik.close()
Efekt – dopisanie ZZZZZ na końcu pliku
Cokolwiekku Pliku druga linia Linia trzecia pliku Ostatnia pliku liniaZZZZZ
w
plik = open('test.txt', 'w') plik.write('AAAAA') plik.close()
Efekt – nadpisanie całej zawartości pliku
AAAAA
Jak widzimy musimy wiedzieć w jakim celu otwieramy plik do zapisu. Wykorzystanie metody r+ powoduje nadpisywanie pliku znak po znaku od początku, metoda a, to dopisanie czegoś na końcu pliku, natomiast w tworzy niejako nowy plik, nadpisując całą zawartość.
Pozycja w pliku
Rozpoczęcie odczytu pliku rozpoczyna się od pozycji 0. Nie koniecznie musi tak być. Możemy sami przestawiać znacznik odpowiedzialny za miejsce w pliku, w którym się aktualnie znajdujemy. Dokonamy tego za pomocą metody seek.
seek – zmiana pozycji w pliku
Przykład:
plik = open('test.txt', 'r') plik.seek(6) print(plik.read()) plik.close()
Zawartość pliku:
Pierwsza linia pliku Pliku druga linia Linia trzecia pliku Ostatnia pliku linia
Efekt wypisania wartości zwróconej przez metodę read() po przesunięciu za pomocą metody seek() o 6 pozycji:
za linia pliku Pliku druga linia Linia trzecia pliku Ostatnia pliku linia
tell – sprawdzenie aktualnej pozycji w pliku
Przykład:
plik = open('test.txt', 'r') print("Sprawdzenie pozycji nr 1:",plik.tell()) plik.seek(6) print("Sprawdzenie pozycji nr 2:",plik.tell()) plik.read() print("Sprawdzenie pozycji nr 2:",plik.tell()) plik.close()
Efekt:
Sprawdzenie pozycji nr 1: 0 Sprawdzenie pozycji nr 2: 6 Sprawdzenie pozycji nr 2: 85
Na starcie jesteśmy na pozycji 0. Za pomocą metody seek przesunęliśmy się o 6 pozycji dalej. Zatem efekt kolejnego sprawdzenia pozycji to 6. Po odczytaniu pozostałej części pliku docieramy na jego koniec. Znajdujemy się wówczas na pozycji 85.