PYTHON

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.