Pliki i wyjątki w Pythonie

Praca z plikami sprawi, że Państwa programy będą szybkie podczas analizowania dużej ilości danych. Wyjątki są specjalnymi obiektami, które Python służy do zarządzania błędami występującymi podczas działania programu. W tym samouczku dowiemy się, jak pracować z plikami i obsługiwać niektóre błędy wyjątków.

Wymagania wstępne

Proszę posiadać podstawową wiedzę na temat języka Python.

Odczyt z pliku

Podczas pracy z danymi w pliku tekstowym należy najpierw wczytać plik do pamięci. Aby odczytać plik, należy mieć plik z pewnymi danymi.

Utwórzmy plik tekstowy zawierający listę lat od 2020 do 2022 za pomocą edytora i zapiszmy go w tym samym folderze, w którym przechowywane są nasze pliki Pythona jako years.txt. Plik years.txt plik powinien mieć:

Poniżej znajduje się program, który otwiera powyższy plik, odczytuje go i drukuje dane z pliku:

with open(‘years.txt’) as file_object:

    contents = file_object.read()

 print(contents)

The open() przyjmuje jeden argument, którym jest nazwa pliku do otwarcia. Python szuka wartości years.txt w folderze, w którym przechowywany jest nasz plik Pythona. Plik open() zwraca obiekt reprezentujący plik (years.txt), który jest następnie przechowywany w zmiennej file_object.

Słowo kluczowe with zamyka plik, gdy dostęp do niego nie jest już potrzebny.

The read() służy do odczytu wszystkich danych z pliku i zapisania ich w zawartości.

Kiedy uruchomimy powyższy kod, otrzymamy dane wyjściowe jako:

Praca z zawartością pliku

Teraz, gdy nauczyli się Państwo odczytywać plik do pamięci, spróbujmy zrobić coś z tymi danymi. Utwórzmy pojedynczy wiersz przechowujący wszystkie cyfry w pliku years.txt bez białych spacji.

with open(‘years.txt’) as file_object:

    lines = file_object.readlines()

yrs_string = ‘’ # create a variable yrs_string to hold the digits of years

for line in lines: # create a loop that adds each line of digits to yrs_string

     yrs_string += line.rstrip() #.rstrip() removes the newline character from each line

print(yrs_string) # print this string

print(len(yrs_string)) # print how long the string is 

 # OUTPUT

 # 209020702089

 # 12

Uwaga: Podczas odczytu z pliku tekstowego Python interpretuje cały tekst jako ciąg znaków. Jeśli odczytują Państwo liczbę z pliku i chcą wykonać operacje arytmetyczne, należy przekonwertować ją na liczbę zmiennoprzecinkową za pomocą funkcji float() lub liczbę całkowitą przy użyciu funkcji int() funkcji.

Zapis do pliku

Zapis do pliku jest jednym z najprostszych sposobów zapisywania danych. Dane wyjściowe będą nadal dostępne nawet po zamknięciu terminala zawierającego dane wyjściowe naszego programu.

Podczas zapisywania tekstu do pliku używamy funkcji open() z dwoma argumentami. Pierwszy argument to nazwa pliku, a drugi to tryb, w którym plik ma zostać otwarty.

Istnieją 4 tryby, w których można otworzyć plik:

1. Tryb odczytu (r)

2. Tryb zapisu (w)

3. Tryb dodawania (a)

4. Odczyt i zapis (r+)

Zapis do pustego pliku

Jeśli zapisywany plik w ogóle nie istnieje, polecenie open() automatycznie wygeneruje plik.

with open(‘student.txt’, ‘w’) as file_object:

      file_object.write(“My name is Felix.”)

Powyższy kod nie drukuje danych wyjściowych w terminalu, ale po otwarciu pliku student.txt zobaczą Państwo jeden wiersz:

My name is Felix.

UWAGA: Podczas otwierania pliku w w i plik istnieje, Python usunie plik przed zwróceniem obiektu pliku.

Dołączanie do pliku

Aby dodać dane do pliku, należy otworzyć plik w trybie dołączania. Wszelkie zapisane dane zostaną umieszczone na końcu pliku.

Dodajmy kilka wierszy w pliku student.txt pliku:

with open(‘student.txt’, ‘a’) as file_object: #’a’ argument to open the file for appending

      file_object.write(“I am 6 years old\n”)

      file_object.write(“I love playing games\n”)

Nowy student.txt wygląda następująco:

My name is Felix. 

I am 6 years old 

I love playing games

Wyjątki

Wyjątki są unikalnymi obiektami, których Python używa do kontrolowania błędów występujących podczas działania programu. Błędy wyjątków powstają, gdy poprawne składniowo programy Pythona generują błąd. Kiedy pojawiają się te błędy, Python tworzy obiekt wyjątku. Jeśli napiszemy kod, który poradzi sobie z wyjątkiem, nasze programy będą nadal działać. Jeśli tego nie zrobimy, nasze programy przestaną być wykonywane i pokażą ślad wsteczny, który jest bardzo trudny do zrozumienia dla użytkownika.

Python używa funkcji try-except do kontrolowania wyjątków. A try-except informuje Pythona, jak postępować, gdy pojawi się wyjątek. Nasze programy będą nadal wykonywane, nawet jeśli coś pójdzie nie tak.

Obsługa wyjątku ZeroDivisionError

Uruchommy program, który dzieli liczbę przez zero. Absolutnie wiemy, że jest to niepraktyczne, ale zobaczmy, co zrobi Python.

Po uruchomieniu powyższego kodu Python daje następujący wynik:

Traceback (most recent call last):   File “C:\Users\ADMIN\PycharmProject\pythonProject\main.py”, line 1, in <module>  print(6/0) ZeroDivisionError: division by zero

Ponieważ Python nie może podzielić liczby przez zero, zgłasza błąd w trace-back, ZeroDivisionError, który jest obiektem wyjątku. Ten rodzaj obiektu odpowiada na scenariusz, w którym Python nie może zrobić tego, o co go poprosiliśmy.

Jeśli myślą Państwo o wystąpieniu błędu, proszę użyć funkcji try-except aby kontrolować wyjątek, który może zostać zgłoszony.

Aby obsłużyć wyjątek ZeroDivisionError wyjątek, proszę użyć try-except w następujący sposób:

try:

 print(6/0)

except ZeroDivisionError:

 print(“You can’t divide by zero!”) # You can’t divide by zero!

Obsługa wyjątku FileNotFoundError

Podczas pracy z brakującymi plikami zawsze pojawiają się błędy. Python może nie pobrać pliku, jeśli wpisano nieprawidłową pisownię nazwy pliku lub plik nigdy nie istniał. Radzimy sobie z tą sytuacją poprzez zastosowanie funkcji try-except block. Na przykład poniższy program próbuje odczytać plik, który nie istnieje na moim komputerze.

filename = ‘John.txt’

with open(filename) as f_obj:

 contents = f_obj.read()

Ponieważ Python nie może odczytać pliku, który nie istnieje, zgłasza wyjątek:

Traceback (most recent call last):

  File “C:\Users\ADMIN\PycharmProject\pythonProject\main.py”, line 2, in <module>

 with open(filename) as f_obj:

FileNotFoundError: [Errno 2] No such file or directory: ‘john.txt’

Ponieważ Python nie może znaleźć pliku, który otwieramy, tworzy on wyjątek, którym jest FileNotFoundError wyjątek. W tym przykładzie, wyjątek open() funkcja powoduje błąd. Aby rozwiązać ten błąd, proszę użyć bloku try tuż przed linią, która zawiera funkcję open() function:

filename = ‘John.txt’

try:

 with open(filename) as f_obj:

       contents = f_obj.read()

except FileNotFoundError:

 msg = “Sorry, the file “+ filename + “does not exist.”

 print(msg) # Sorry, the file John.txt does not exist.

Wnioski

W tym artykule dowiedzieliśmy się, jak:

  • Czytać z pliku
  • Praca z zawartością pliku
  • Zapis do pliku
  • Proszę obsłużyć ZeroDivisionError wyjątek
  • Proszę obsłużyć wyjątek FileNotFoundError wyjątek