Programowanie w Sieci Internet Python: Operacje z plikami oraz
Transkrypt
Programowanie w Sieci Internet Python: Operacje z plikami oraz
Programowanie w Sieci Internet Python: Operacje z plikami oraz obsługa wyjątków Kraków, 5 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Otwieranie plików Otwieranie plików jest realizowane przez metodę ● open(file_name [, access_mode][, buffering]) ● access_mode – tryb otwierania pliku. (r – odczyt, rb – odczyt binarny, r+ - odczyt i zapis, rb+ - odczyt i zapis binarny, w – zapis, wb – zapis binarny, w+ – zapis i odczyt, wb+ – zapis i odczyt binarnie, a – dołącznie do pliku, ab – dołączanie do pliku binarnie, a+ – dołącznie i odczyt z pliku, ab+ – dołączanie i odczyt binarny z pliku. ● buffering – rodzaj buforowania (0 – brak bufforowania, 1 – buforowanie linii, > 1 – określa rozmiar bufora, < 0 – używa domyślnego buforowania systemowego. Atrybuty pliku: file.closed – czy plik jest zamknięty, file.mode – zwraca tryb pracy z plikiem, file.name – nazwa pliku. Praca z dokumentem ● ● ● ● ● close() – dokonuje zrzutu nie zapisanych danych z bufora i zamyka plik. Po tej akcji nie można już więcej pisać do tego pliku. Python jednal sam zamyka pliki gdy juz nie istnieje zadne odwolanie do pliku. write() – dodaje “text” do pliku (ten “text” może być także traktowany jako dane binarne), read() – czyta “text” z pliku (tu również “text” może być danymi binarnymi). read() może pobierać parametr mówiący o liczbie bajtów, które ma odczytać. Bez podania liczby bajtów do odczytu, python prubuje odczytać tyle ile da rade, w szczególności do końca pliku, tell() – zwraca pozycję kursora względem początku pliku, speak(offset [,from]) – ustawia kursor (from 0 – początek pliku, 1 – obecna pozycja, 2 – koniec pliku) Zmiana nazwy / usówanie pliku ● ● os.rename(current_name, new_name) – zmienia nazwę pliku na nową, os.remove(file_name) – usówa plik. Katalogi ● os.mkdir(dir_name) – tworzy katalog, ● os.chdir(dir_name) – zmienia katalog na dir_name, ● os.getcwd() – zwraca lokalizacje obecnego katalogu, ● os.rmdir(dir_name) – usówa katalog dir_name. Exceptions Obsluga wyjątków w pythonie różni się nieco od innych językow wysokiego poziomu. Zwyczajowo istnieje blok try, w ktorym wykonywany jest kod, ktory moż epowodować wystąpienie wyjątków. Po bloku try umieszczamy bloki except, w których to obsługujemy poszczególne wyjątki. A na koniec (i tu znacząca różnica) blok else, ktory zawiera operacje ktore wykonujemy gdy nie napotkano żadnego wyjątku. Jeśli po słowie kluczowym except nie uimieścimy klasy wyjątku, to w blok ten wpadnie każdy wyjątek, który poleciał z kodu w bloku try. Oczywiście możemy wyłapać do naszego bloku konkretne wyjatki poprzez except(Exception1[, Exception2[,...ExceptionN]]): Exceptions c.d. Mamy także blok finally, w ktory wpadamy zawsze niezależnie od tego czy został rzycony jakikolwiek wyjątek. Blok finally nie może zostać użyty razem z blokiem else. Do bloku except można także dorzucić argument, jest to argument wyjatku i dzięki temu mozna wyświetlić jego wartość: except Exception, Argument: Jeśli mamy kilka exceptionów łapanych do bloku, to argument bedize należał do najważniejszego złapanego wyjatku. Dodatkowo argument może być nie jedno, a wielo wartościowy i zwracac takie dane jak error message string, error number i error location. Rzucanie wyjątkami Aby rzucić wyjatkiem wystarczy wywołać raise [Exception [, arg [, traceback]]] Exception jest typu exception, arg jest jego wartoscią i jest opcjonalny. Można także dołączyć trackback obiekt. Exception to może być dowolny, objekt li klasa (w szczególności może to być string) Aby móc złapać ten wyjątek należy łapać ten objekt, klase lub dokładnie ten sam string. Przyklad na następnej stronie Przyklad utwożenia wlasnego Exceptiona Utworzenie własnego Exceptiona bazujac na RuntimeError class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg Rzucenie i złapanie naszego wyjątku z wyswietleniem info try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args Dziękuję za uwagę!