Języki skryptowe Python
|
|
- Antonina Stachowiak
- 8 lat temu
- Przeglądów:
Transkrypt
1 Języki skryptowe Python Wykład 6 Moduły i pliki Janusz Szwabiński Plan wykładu: Moduły i ich importowanie Tworzenie własnych modułów Pliki odczyt i zapis Manipulowanie plikami i katalogami
2 Moduły i ich importowanie skrypty w Pythonie lub kod skompilowany np. w C/C++ najczęściej zawierają definicje obiektów do wielokrotnego użycia definicje w nich zawarte mogą być w każdej chwili dostępne w interpreterze lub innym skrypcie do załadowania modułu służy instrukcja import dodatkowo wbudowana funkcja import pozwala na załadowanie modułu, którego nazwa została określona w trakcie wykonywania programu moduł można przeładować w locie (np. po dokonaniu w nim zmian) poleceniem reload moduły to przykłady obiektów typy singleton. tzn. tylko jedna instancja konkretnego modułu jest załadowana do pamięci, i jest ona globalnie dostępna moduły mają własne przestrzenie nazw Kilka słów o przestrzeniach nazw Przestrzeń nazw (nie tylko) w Pythonie to abstrakcyjna przestrzeń, w której dowolne słowo może być jednoznacznie przypisane do reprezentowanego przez nie obiektu (funkcji, zmiennej itp.): wskazanie obiektu poprzez nazwę większość przestrzeni nazw zaimplementowana w postaci słowników (może się zmienić w przyszłości) trzy ważne przestrzenie nazw: zbiór nazw wbudowanych nazwy lokalne (podczas wywołania funkcji) nazwy globalne nie istnieje związek pomiędzy nazwami z różnych przestrzeni nazw przestrzenie nazw tworzone są w różnych chwilach i są aktywne przez różny czas przestrzeń zawierająca nazwy wbudowane tworzona jest podczas pracy Pythona i nigdy nie jest usuwana przestrzeń nazw globalnych modułu tworzona jest podczas wczytywania jego definicji i jest aktywna do chwili zakończenia pracy interpretera instrukcje wykonywane przez szczytowe wywołania interpretera, zarówno czytane z pliku jak i wprowadzane interaktywnie, są częścią modułu o nazwie main nazwy wbudowane przechowywane są w module builtin przestrzeń nazw lokalnych funkcji tworzona jest w momencie jej wywołania i niszczona, gdy następuje powrót z funkcji (również przez nieobsłużony wyjątek) wywołanie rekurencyjne powoduje tworzenie za każdym razem nowej przestrzeni nazw lokalnych zasięg jest tekstowym obszarem programu, w którym przestrzeń nazw jest wprost osiągalna, tzn. niekwalifikowane odniesienia do nazwy znajdują ją w obowiązującej przestrzeni nazw. Dla przykładu, jeżeli w celu wyliczenia pierwiastka kwadratowego z liczby 10 muszę wykonać polecenie math.sqrt(10)to funkcja sqrtnie jest dostępna bezpośrednio, czyli znajduje się poza zasięgiem aktualnej przestrzeni nazw. w każdym momencie wykonania programu używa się trzech zagnieżdżonych zasięgów nazw: najbardziej zagnieżdżony, nazwy lokalne środkowy, zawiera aktualne nazwy globalne modułu zewnętrzny, jest zasięgiem nazw wbudowanych przypisanie zawsze zachodzi w najbardziej zagnieżdżonym zasięgu przypisania nie powodują kopiowania danych, przywiązują jedynie nazwy do obiektów
3 In [1]: print dir( builtin ) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseExcepti on', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFErro r', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingP ointerror', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportErro r', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'Non e', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowErr or', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'T ypeerror', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncode Error', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', ' IPYT HON ', ' IPYTHON active', ' debug ', ' doc ', ' import ', ' name ', ' package ', 'abs', 'all', 'any', 'apply', 'basestrin g', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'ch r', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyrigh t', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'dreload', 'enume rate', 'eval', 'execfile', 'file', 'filter', 'float', 'format', 'fro zenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'he lp', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclas s', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'ma x', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'po w', 'print', 'property', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 's taticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'uni code', 'vars', 'xrange', 'zip'] Importowanie modułów Do załadowania modułu służy funkcja import. Jego nazwa trafia wówczas do bieżącej tablicy symboli. Przez tę nazwę odnosimy się do elementów modułu: In [2]: import math print math.sqrt(2) Funkcja import umożliwia również zaimportowanie wybranych elementów do aktualnej tablicy symboli. Możliwe są wówczas niekwalifikowane odniesienia do ich nazw: In [3]: from math import sqrt as SQ print SQ(2) Istnieje również możliwość załadowania całego modułu do bieżącej tablicy symboli, jednak powinniśmy go unikać, ponieważ może to prowadzić do niekontrolowanego nadpisania niektórych funkcji:
4 In [4]: from math import * print sqrt(2) Jeżeli używamy jej w skrypcie albo innym module, w dobrym zwyczaju załadowanie wszystkich potrzebnym modułów na początku pliku źródłowego. Tworzenie własnych modułów Rozważmy najpierw dwie funkcje : In [5]: def fib(n): # wypisz na ekranie wyrazy szeregu Fibonacciego mniej sze od n a, b = 0, 1 while b < n: print b, a, b = b, a+b def fib2(n): # zwróć listę wyrazów szeregu Fibonacciego mniejszych o d n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result In [6]: fib(10) In [7]: fib2(10) Out[7]: [1, 1, 2, 3, 5, 8] Ponieważ funkcje te mogą nam się jeszcze przydać, zapiszmy je do pliku fibo.py:
5 In [108]: %%writefile fibo.py def fib(n): a, b = 0, 1 while b < n: print b, a, b = b, a+b def fib2(n): result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result Writing fibo.py Ten plik to nic innego jak nasz pierwszy (dość prosty) moduł: In [8]: import fibo dir(fibo) Out[8]: [' builtins ', ' doc ', ' file ', ' name ', ' package ', 'fib', 'fib2'] In [9]: fibo.fib(10) In [10]: fibo.fib2(10) Out[10]: [1, 1, 2, 3, 5, 8] Moduł ten możemy nieco "podrasować", dodając m.in. dokumentację:
6 In [117]: %%writefile fibo.py # -*- coding: utf-8 -*- """Funkcje generujące wyrazy szeregu Fibonacciego""" def fib(n): """Wyświetl wyrazy szeregu mniejsze od n na ekranie""" a, b = 0, 1 while b < n: print b, a, b = b, a+b def fib2(n): """Zwróć listę wyrazów szeregu mniejszych od n""" result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result Overwriting fibo.py In [11]: reload(fibo) Out[11]: <module 'fibo' from 'fibo.pyc'> In [12]: help(fibo) Help on module fibo: NAME fibo - Funkcje generujące wyrazy szeregu Fibonacciego FILE /home/szwabin/dropbox/zajęcia/pythonintro/6_moduly_i_pliki/fib o.py FUNCTIONS fib(n) Wyświetl wyrazy szeregu Fibonacciego mniejsze od n fib2(n) Zwróć listę wyrazów szeregu Fibonacciego mniejszych od n Częstą praktyką jest dodawanie do modułu kodu, który zostanie wykonany w momencie uruchomienia modułu jako samodzielnego programu. Zrealizujemy to w następujący sposób (argument -aoznacza, że dodajemy do istniejącego pliku):
7 In [129]: %%writefile -a fibo.py def test(): """Funkcja testująca działanie modułu""" assert(fib2(4)[-1]==3) print "Test zakończony poprawnie" if name == ' main ': test() Appending to fibo.py Zmienna name zawiera z reguły nazwę modułu. Wyjątkiem jest sytuacja, w której moduł uruchomiony jest jako samodzielny program wówczas ta zmienna odnosi się do napisu main. Sprawdźmy, jak to działa. Po przeładowaniu modułu pojawiła się dodatkowa funkcja: In [13]: reload(fibo) Out[13]: <module 'fibo' from 'fibo.py'> In [14]: dir(fibo) Out[14]: [' builtins ', ' doc ', ' file ', ' name ', ' package ', 'fib', 'fib2', 'test'] Możemy ją oczywiście wywołać ręcznie: In [15]: fibo.test() Test zakończony poprawnie Przy uruchomieniu modułu jako skryptu, zostanie ona uruchomiona automatycznie: In [16]:!python fibo.py Test zakończony poprawnie Ścieżka wyszukiwania modułów gdy moduł fibojest importowany, interpreter Pythona poszukuje pliku fibo.pyw katalogu bieżącym, a następnie w katalogach określonych w zmiennej środowiskowej PYTHONPATH jeśli zmienna PYTHONPATHnie jest określona, lub modułu nie ma w katalogach zdefiniowanych w zmiennej, interpreter kontynuuje poszukiwanie w ścieżkach ustalonych w momencie instalacji (pod Linuksem najczęściej /usr/lib/pythonlub /usr/local/lib/python) na samym końcu przeszukiwane są katalogi umieszczone w zmiennej sys.path
8 In [17]: import sys print sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gn u', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/us r/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-package s', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-pac kages/pilcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/us r/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubunt u-sso-client', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2', '/us r/lib/python2.7/dist-packages/ipython/extensions'] In [18]:!echo $PYTHONPATH Rozszerzanie ścieżki wyszukiwania Pod Linuksem dodajemy do pliku.bashrcw naszym katalogu domowym następujący kod: PYTHONPATH=$PYTHONPATH:$HOME/MyPython export PYTHONPATH Ze wzgledu na legendarną przyjazność systemu operacyjnego dla użytkownika, użytkownicy Windowsa radzą sobie sami :) Pliki odczyt i zapis Wbudowana funkcja openotwiera plik i tworzy odpowiadający mu obiekt. Jej składnia jest następująca: open(nazwa_pliku,tryb) pierwszy argument to ciąg znaków będący nazwą pliku drugi argument to ciąg znaków sposób pracy z plikiem 'r' tylko do odczytu (wartość domyślna) 'w' tylko do zapisu (istniejący plik o podanej nazwie zostanie nadpisany!) 'a' dopisywanie do istniejącego pliku 'r+' do odczytu i zapisu 'rb' tylko do odczytu w trybie binarnym 'wb' tylko do zapisu w trybie binarnym 'r+b' do odczytu i zapisu w trybie binarnym In [19]: f = open('workfile','w') print f <open file 'workfile', mode 'w' at 0x7f7a9dec4420>
9 Pracując z obiektami plików, mamy do dyspozycji następujące metody: read() wczytuje całą zawartość pliku i przekształca ją w napis (uwaga na duże pliki!) read(n) wczytuje nbajtów z pliku readline() czyta pojedynczy wiersz z pliku readlines() zwraca listę, której elementami są łańcuchy znaków reprezentujące poszczególne wiersze z pliku (uwaga na duże pliki!) write(napis) zapisuje łańcuch znaków do pliku tell() bieżąca pozycja w pliku mierzona w bajtach seek(k,p) zmienia pozycję w pliku dodając kbajtów do punktu odniesienia p: p=0 początek pliku p=1 pozycja bieżąca p=2 koniec pliku close() zamknięcie pliku In [20]: f.close() print f <closed file 'workfile', mode 'w' at 0x7f7a9dec4420> Otwórzmy powyższy plik raz jeszcze, tym razem w trybie do odczytu i zapisu: In [21]: f = open("workfile",'r+') Sprawdzamy jego zawartość: In [22]: f.read() #powinien być pusty Out[22]: '' Wpisujemy coś do pliku: In [23]: f.write(" abcdef") Odczytujemy pozycję w pliku: In [24]: f.tell() Out[24]: 16 Przechodzimy do 5 bajtu w pliku i odczytujemy kolejny jeden bajt: In [25]: f.seek(5) f.read(1) Out[25]: '5' Ponownie odczytujemy pozycję:
10 In [26]: f.tell() Out[26]: 6 Trzeci bajt od końca: In [27]: f.seek(-3,2) f.read(1) Out[27]: 'd' Wracamy na początek i odczytujemy dwa kolejne bajty: In [28]: f.seek(0) f.read(2) Out[28]: '01' Wczytujemy cały wiersz: In [29]: f.seek(0) f.readline() Out[29]: ' abcdef' Próba odczytu po zamknięciu pliku spowoduje błąd: In [30]: f.close() f.readline() ValueError Traceback (most recent cal l last) <ipython-input-30-02a0f4f4da9c> in <module>() 1 f.close() ----> 2 f.readline() ValueError: I/O operation on closed file Z życia (naukowców) wzięte Rozważmy plik będący wynikiem numerycznego rozwiązania równań ruchu oscylatora harmonicznego z tłumieniem:
11 In [71]:!head -20 osc_rk4.dat #osc_rk4.dat #oscylator harmoniczny z tlumieniem #i sila wymuszajaca #czas(s) polozenie(m) predkosc(m/s) Widzimy, że pierwsze 4 wiersze w pliku to komentarz, natomiast kolejne zawierają dane opisujące położenie i prędkość oscylatora w funkcji czasu, uporządkowane w 3 kolumnach. Naszym celem jest wczytanie tego pliku w Pythonie. Możliwość pierwsza lista wszystkich wierszy: In [73]: results = [] f = open("osc_rk4.dat","r") #wczytujemy wiersze, pomijamy komentarz lines = f.readlines()[4:] #zamykamy plik f.close() #wydobywamy dane z wczytanych ciągów znaków for line in lines: #dzielimy wiersz na pola fields = line.split() #zamieniamy napisy na liczby time = float(fields[0]) pos = float(fields[1]) vel = float(fields[2]) #dopisujemy do listy z wynikami all = (time,pos,vel) results.append(all) #sprawdzamy wynik for i in results[:5]: print i ( , , ) ( , , ) ( , , ) ( , , ) ( , , )
12 W przypadku bardzo dużych plików rozwiązanie to mocno obciąża pamięć, ponieważ cały plik musi być załadowany do pamięci operacyjnej komputera. Dlatego lepiej jest iterować po wierszach w pliku: In [74]: results = [] f = open("osc_rk4.dat","r") #iteracja po wierszach - w każdym kroku wczytywany tylko jeden wiers z for line in f: #ignorujemy komentarz if line[0] == "#": continue #wydobycie danych tym razem bardziej "pythonowo" all = [float(val) for val in line.split()] results.append(all) #zamykamy plik f.close() #sprawdzamy wynik for i in results[:5]: print i [ , , ] [ , , ] [ , , ] [ , , ] [ , , ] Iterację po wierszach można również wykonać w wersji tylko dla wtajemniczonych: In [75]: results3 = [[float(val) for val in l.split()] for l in open("osc_rk4.dat","r") if l[0]!= "#"] for i in results3[:5]: print i [ , , ] [ , , ] [ , , ] [ , , ] [ , , ] Inna możliwość to pętla while:
13 In [76]: f = open("osc_rk4.dat","r") while 1: line = f.readline() if not line: break if line[0] == "#": print line f.close() #osc_rk4.dat #oscylator harmoniczny z tlumieniem #i sila wymuszajaca #czas(s) polozenie(m) predkosc(m/s) Do dobrych praktyk należy jednak używanie polecenia withprzy pracy z plikami. Jego zaletą jest to, że odczytywany plik zostanie poprawnie (automatycznie) zamknięty albo po zakończeniu odczytu, albo po wystąpieniu wyjątku: In [78]: with open('osc_rk4.dat') as f: results4 = [[float(val) for val in l.split()] for l in f i f l[0]!= "#"] for i in results4[:5]: print i [ , , ] [ , , ] [ , , ] [ , , ] [ , , ] Ponieważ plik zostaje otworzony w obrębie bloku rozpoczętego poleceniem with, należy do zasięgu lokalnego. Tuż przed wyjściem z tego bloku interpreter zwalnia zasoby zajęte przez zmienne lokalne, a zatem powinien zamknąć plik. Sprawdźmy, czy jest tak rzeczywiście: In [79]: print f <closed file 'osc_rk4.dat', mode 'r' at 0x7f > Zapisywanie do pliku
14 In [80]: #otwieramy plik do zapisu of = open("dane.dat","w") #dobrym zwyczajem jest wpisać do niego jakiś komentarz of.write("#dane.dat\n") of.write("#oscylator harmoniczny z tlumieniem i sila wym.\n") of.write("#czas polozenie predkosc\n") #zapisujemy wyniki z listy results for l in results: of.write("%5.2f %5.2f %5.2f\n"%(l[0],l[1],l[2])) #zamykamy plik of.close() Sprawdźmy zawartość pliku dane.dat(w konsoli uniksowej): In [81]:!head -10 dane.dat #dane.dat #oscylator harmoniczny z tlumieniem i sila wym. #czas polozenie predkosc
15 Zauważmy, że writew pętli forw powyższym przykładzie zapisuje do pliku cały wiersz z danymi na raz. Wiersz ten utworzony jest z szablonu, czyli łancucha znaków zawierającego pewne symbole. W ich miejsce wstawiane są przy pomocy operatora %dane liczbowe z krotki będącej prawym argumentem tego operatora. Możliwe jest następujące formatowanie: %d liczba całkowita %5d liczba całkowita w polu o szerokosci 5 znaków %-5d j.w, ale wyrównana do lewej %05d j.w., ale uzupełniona zerami od lewej (np ) %g liczba zmiennoprzecinkowa w formacie %f lub %e %e liczba zmiennoprzecinkowa w formacie naukowym (np e + 00) %E j.w., ale wykładnik oddzielony litera E %G liczba zmiennoprzecinkowa w formacie %f lub %E %11.3e liczba zmiennoprzecinkowa w formacie %e z trzema cyframi dziesiętnymi w polu o szerokości 11 znaków %.3e liczba zmiennoprzecinkowa w formacie %e z trzema cyframi dziesiętnymi w polu o najmniejszej możliwej szerokości %5.1f liczba zmiennoprzecinkowa zapisana w notacji dziesiętnej z jedną cyfrą dziesiętną w polu o szerokości 5 znaków %.3f j.w., ale z trzema liczbami dziesiętnymi w polu o możliwie najmniejszej szerokości %s ciąg znaków %-20s ciąg znaków wyrównany do lewej w polu o szerokości 20 znaków Nowszy sposób formatowania łańcuchów znaków Powyższy sposób formatowania łańcuchów znaków jest bardzo popularny, ponieważ przypomina on styl używany przez funkcję sprintfw języku C. Jednak uważany jest on za nieco przestarzały i obecnie zaleca się stosowanie metody formatobiektu str. W porównaniu ze starą składnią, tutaj pojawiają się nawiasy klamrowe i zamiast znaku %używany jest znak :. Np. '%03.2f'zostanie zastąpione przez '{:03.2f}'. Nowy sposób formatowania oferuje jednak szereg nowych możliwości: In [82]: print '{0}, {1}, {2}'.format('a', 'b', 'c') #wstawianie argumentów n a podstawie ich pozycji print '{}, {}, {}'.format('a', 'b', 'c') print '{2}, {1}, {0}'.format('a', 'b', 'c') a, b, c a, b, c c, b, a In [84]: print '{2},{1},{0}'.format(*'abc') ożna rozpakować print '{0}{1}{0}'.format('abra', 'cad') powtarzać # sekwencję w argumencie m # indeksy argumentów można c,b,a abracadabra
16 In [87]: #wartości wstawiane po kluczach print 'Współrzędne: {latitude}, {longitude}'.format(latitude='37.24 N', longitude=' w') coord = {'latitude': '37.24N', 'longitude': ' W'} print 'Współrzędne: {latitude}, {longitude}'.format(**coord) Współrzędne: 37.24N, W Współrzędne: 37.24N, W In [92]: #justowanie tekstu print '{:<30}'.format('left aligned') print '{:>30}'.format('right aligned') print '{:^30}'.format('centered') #jak wyżej, tylko z '*' jako znakiem wypełniającym print '{:*^30}'.format('centered') left aligned right aligned centered ***********centered*********** In [89]: print '{:+f}; {:+f}'.format(3.14, -3.14) #znak pojawia się zawsze print '{: f}; {: f}'.format(3.14, -3.14) #spacja w przypadku liczb dodatnich print '{:-f}; {:-f}'.format(3.14, -3.14) #pokazuje tylko minus ; ; ; In [90]: # możliwa jest konwersja w 'locie' print "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) int: 42; hex: 2a; oct: 52; bin: In [2]: '{:,}'.format( ) #przecinek jako separator między tysiącami Out[2]: '1,234,567,890' Więcej na temat metody format pod adresem ( Marynowanie danych czyli moduł cpickle napisy łatwo zapisuje się do i odczytuje z pliku liczby wymagają trochę pracy przy konwersji z i na łańcuch znaków jeszcze trudniej jest zapisać i odczytać złożone typy danych moduł cpicklepotrafi przekształcić prawie każdy złożony typ danych w napis ("marynowanie") taki napis można zapisać do pliku, przesłać przez sieć itp. można go również "odmarynować", czyli wydobyć z niego oryginalny obiekt standardowy sposób na uczynienie obiektów Pythona trwałymi warto dbać o to, aby tworzone typy danych dawały się łatwo "marynować"
17 In [93]: import cpickle as pickle In [94]: dir(pickle) Out[94]: ['BadPickleGet', 'HIGHEST_PROTOCOL', 'PickleError', 'Pickler', 'PicklingError', 'UnpickleableError', 'Unpickler', 'UnpicklingError', ' builtins ', ' doc ', ' name ', ' package ', ' version ', 'compatible_formats', 'dump', 'dumps', 'format_version', 'load', 'loads'] In [95]: help(pickle.dump) Help on built-in function dump in module cpickle: dump(...) dump(obj, file, protocol=0) -- Write an object in pickle format to the given file. See the Pickler docstring for the meaning of optional argument p roto. Przygotujmy jakieś dane do zapisania: In [96]: tel = {'Yoda' : 1111, 'Chewie' : 2222, 'Luke' : 3333} lis = range(5) l = 123 Zapisujemy je do pliku: In [97]: of = open("marynata","w") pickle.dump(tel,of) pickle.dump(lis,of) pickle.dump(l,of) of.close() Podglądnijmy zapisany plik:
18 In [98]:!cat marynata (dp1 S'Chewie' p2 I2222 ss'yoda' p3 I1111 ss'luke' p4 I3333 s.(lp1 I0 ai1 ai2 ai3 ai4 a.i123. Dane z pliku ładujemy w kolejności zapisania: In [99]: f = open("marynata","r") telefony = pickle.load(f) zakres = pickle.load(f) liczba = pickle.load(f) f.close() In [100]: print telefony print zakres print liczba {'Chewie': 2222, 'Yoda': 1111, 'Luke': 3333} [0, 1, 2, 3, 4] 123 Manipulowanie plikami i katalogami Funkcje potrzebne do operacji na plikach znajdziemy w module os: większość funkcji zaimplementowana w modułach specyficznych dla danej platformy (np. posix, nt) podczas ładowania oswybierany jest odpowiedni z nich operacje na plikach (zmiana nazwy i atrybutów, usuwanie) operacje na katalogach operacje na procesach In [1]: import os
19 Usuwanie plików Tworzymy najpierw jakiś plik do usunięcia: In [2]: f = open("testos.txt","w") f.write("jakiś test") f.close() Usunięcie pliku jest proste: In [3]: os.remove("testos.txt") Powtórzenie usunięcie wygeneruje znany już wyjątek: In [4]: os.remove("testos.txt") OSError Traceback (most recent cal l last) <ipython-input-4-a342e4040f74> in <module>() ----> 1 os.remove("testos.txt") OSError: [Errno 2] No such file or directory: 'testos.txt' Podczas pracy interaktywnej w interpreterze Pythona taki błąd nie stanowi oczywiście wielkiego problemu, ponieważ programista może na niego natychmiast zareagować. Jeśli jednak wyjątek pojawi się podczas wykonywania dłuższego skryptu, przerwie on jego działanie. Jest to oczywiście sytuacja niepożądana, dlatego do dobrych praktyk należy wyłapywanie wyjątków. Zagadnieniu temu poświęcony będzie część jednego z kolejnych wykładów. Natomiast teraz powinien wystarczyć przykład, jak radzić sobie w tym konkretnym przypadku: In [5]: try: os.remove("testos.txt") except os.error: print "Operacja nie powiodła się" Operacja nie powiodła się Zmiana nazwy pliku Stwórzmy najpierw jakis plik roboczy: In [6]: name1 = "plik.txt" fi = open(name1,'w') fi.write("to jest plik roboczy o nazwie %s."%name1) fi.close()
20 Sprawdźmy, czy plik taki rzeczywiście powstał, i co zawiera: In [7]: %%bash ls -l plik.txt -rw-rw-r-- 1 szwabin szwabin 39 lis 10 18:10 plik.txt In [8]: %%bash cat plik.txt To jest plik roboczy o nazwie plik.txt. Dygresja Polecenie %%bash to przykład polecenia magicznego IPythona. W tym konkretnym przypadku pozwala on korzystać z funkcjonalności powłoki systemowej bez wychodzenia z notatnika. Zmiany nazwy pliku dokonamy przy pomocy polecenia os.rename: In [9]: name2 = "file.txt" os.rename(name1,name2) Sprawdźmy wynik działania tego polecenia: In [10]: fi = open(name1) IOError Traceback (most recent cal l last) <ipython-input f > in <module>() ----> 1 fi = open(name1) IOError: [Errno 2] No such file or directory: 'plik.txt' In [12]: fi = open(name2) fi.read() Out[12]: 'To jest plik roboczy o nazwie plik.txt.' In [13]: fi.close() Informacje o pliku In [14]: os.stat(name2) Out[14]: posix.stat_result(st_mode=33204, st_ino= , st_dev=2051, st_nl ink=1, st_uid=1000, st_gid=1000, st_size=39, st_atime= , s t_mtime= , st_ctime= ) Jak widać, wynik działania polecenia os.statnie jest szczególnie czytelny. Możemy jednak to zmienić:
21 In [16]: import time def dump(st): mode,ino,dev,nlink,uid,gid,size,atime,mtime,ctime = st print "- rozmiar:", size, "bajtów" print "- właściciel:", uid, gid print "- utworzony:", time.ctime(ctime) print "- ostatni dostęp:", time.ctime(atime) print "- ostatnia modyfikacja:", time.ctime(mtime) st = os.stat(name2) dump(st) - rozmiar: 39 bajtów - właściciel: utworzony: Tue Nov 10 18:15: ostatni dostęp: Tue Nov 10 18:16: ostatnia modyfikacja: Tue Nov 10 18:10: Dygresja! Gdybyśmy planowali stworzyć własny moduł z przydatnymi funkcjami do pracy na plikach, funkcja dumpbyłaby bardzo dobrą kandydatką na element tego modułu. Podstawowe operacje na katalogach Sprawdźmy bieżący katalog: In [17]: os.getcwd() Out[17]: '/home/szwabin/dropbox/zaj\xc4\x99cia/pythonintro/6_moduly_i_pliki' Jego zawartość wyświetlimy przy pomocy funkcji os.listdir: In [18]: print os.listdir(os.getcwd()) ['5-intro.pdf.gz', 'calc.py', 'modutils.py', 'Chapter8_Modules.ipyn b', '3-intro_utf.pdf', '6_moduly_i_pliki.ipynb', 'box.jpg', 'SciPyth on5.ipynb', '.ipynb_checkpoints', 'SciPython4.ipynb', '4-intro.pdf', 'file.txt', 'bpyfd_diags6.png', 'SciPython3.ipynb'] Można również tak:
22 In [19]: for item in os.listdir(os.getcwd()): print item 5-intro.pdf.gz calc.py modutils.py Chapter8_Modules.ipynb 3-intro_utf.pdf 6_moduly_i_pliki.ipynb box.jpg SciPython5.ipynb.ipynb_checkpoints SciPython4.ipynb 4-intro.pdf file.txt bpyfd_diags6.png SciPython3.ipynb Przy podawaniu ścieżki do katalogów można korzystać z typowych skrótów: In [20]: print "Zawartość katalogu bieżącego:\n" print os.listdir('.') print "\n\nzawartość katalogu nadrzędnego:\n" print os.listdir('..') Zawartość katalogu bieżącego: ['5-intro.pdf.gz', 'calc.py', 'modutils.py', 'Chapter8_Modules.ipyn b', '3-intro_utf.pdf', '6_moduly_i_pliki.ipynb', 'box.jpg', 'SciPyth on5.ipynb', '.ipynb_checkpoints', 'SciPython4.ipynb', '4-intro.pdf', 'file.txt', 'bpyfd_diags6.png', 'SciPython3.ipynb'] Zawartość katalogu nadrzędnego: ['Przyk\xc5\x82ady', '1_Intro', 'ricardoduarte-python-for-developer s-88df06e', 'thinkpython.pdf', '5_Funkcje', '2_Pierwsze_kroki', '3_Z mienne_wyrazenia_instrukcje', '6_Moduly_i_pliki', '4_Zlozone_typy_da nych'] Przejście do innego katalogu roboczego: In [22]: os.chdir("/home/szwabin/mypython") os.getcwd() Out[22]: '/home/szwabin/mypython' Tworzenie katalogów: In [23]: os.listdir('.') Out[23]: []
23 In [24]: os.mkdir('test') os.listdir('.') Out[24]: ['Test'] Jeśli katalog już istnieje: In [25]: os.mkdir('test') OSError Traceback (most recent cal l last) <ipython-input-25-f2fde2339d88> in <module>() ----> 1 os.mkdir('test') OSError: [Errno 17] File exists: 'Test' Możemy tworzyć kilka poziomów na raz: In [26]: os.makedirs('test2/poziom1/poziom2') os.listdir('.') Out[26]: ['Test', 'Test2'] In [27]: print os.listdir('test2') print os.listdir('test2/poziom1') ['Poziom1'] ['Poziom2'] Pojedynczy katalog usuniemy w następujący sposób: In [28]: os.rmdir("test") os.listdir('.') Out[28]: ['Test2'] Możliwe jest również usunięcie całej ścieżki na raz: In [29]: os.removedirs('test2/poziom1/poziom2') os.listdir('.') Out[29]: [] Uwaga! Usuwany katalog musi być pusty: In [30]: os.mkdir('test') f = open('test/plik.txt','w') f.write('bla bla bla') f.close()
24 In [31]: os.rmdir('test') OSError Traceback (most recent cal l last) <ipython-input-31-9d11237dd07e> in <module>() ----> 1 os.rmdir('test') OSError: [Errno 39] Directory not empty: 'Test' In [32]: os.remove('test/plik.txt') os.rmdir('test') In [33]: os.listdir('.') Out[33]: [] Ścieżki dostępu do plików In [34]: plik = "/home/szwabin/books/programming.collective.intelligence.pdf" Pełną ścieżkę do pliku możemy rozbić na nazwę pliku i katalog, w którym plik się znajduje: In [35]: os.path.split(plik) Out[35]: ('/home/szwabin/books', 'Programming.Collective.Intelligence.pdf') Nazwę katalogu i pliku możemy też odczytać specjalnymi funkcjami: In [36]: kat = os.path.dirname(plik) print kat pl = os.path.basename(plik) print pl #nazwa katalogu #nazwa pliku /home/szwabin/books Programming.Collective.Intelligence.pdf Dysponując nazwą katalogu i pliku, możemy je oczywiście połączyć w jedną ścieżkę dostępu: In [37]: os.path.join(kat,pl) Out[37]: '/home/szwabin/books/programming.collective.intelligence.pdf' Przeszukiwanie drzewa katalogów
25 In [47]: for root, dirs, files in os.walk("/home/szwabin/dropbox/zajęcia/pyth onintro/3_zmienne_wyrazenia_instrukcje/", topdown=false): print root print dirs print files print '-'*20 kcje/.ipynb_checkpoints [] ['3_Zmienne_wyrazenia_instrukcje-checkpoint.ipynb', 'Untitled0-check point.ipynb'] kcje/preview/3_zmienne_wyrazenia_instrukcje_files [] ['require.min.js', 'MathJax.js', 'jquery.min.js'] kcje/preview ['3_Zmienne_wyrazenia_instrukcje_files'] ['state_diagram.png', '3_Zmienne_wyrazenia_instrukcje.html', '3_Zmie nne_wyrazenia_instrukcje.html~'] kcje/ ['.ipynb_checkpoints', 'Preview'] ['state_diagram.svg', 'Untitled0.ipynb', 'state_diagram.png', '3_Zmi enne_wyrazenia_instrukcje.ipynb', '3_zmienne_wyrazenia_instrukcje.pd f'] In [48]: for root, dirs, files in os.walk("/home/szwabin/dropbox/zajęcia/pyth onintro/3_zmienne_wyrazenia_instrukcje/", topdown=false): for name in files: print os.path.join(root, name) for name in dirs: print os.path.join(root, name)
26 kcje/.ipynb_checkpoints/3_zmienne_wyrazenia_instrukcje-checkpoint.ip ynb kcje/.ipynb_checkpoints/untitled0-checkpoint.ipynb kcje/preview/3_zmienne_wyrazenia_instrukcje_files/require.min.js kcje/preview/3_zmienne_wyrazenia_instrukcje_files/mathjax.js kcje/preview/3_zmienne_wyrazenia_instrukcje_files/jquery.min.js kcje/preview/state_diagram.png kcje/preview/3_zmienne_wyrazenia_instrukcje.html kcje/preview/3_zmienne_wyrazenia_instrukcje.html~ kcje/preview/3_zmienne_wyrazenia_instrukcje_files kcje/state_diagram.svg kcje/untitled0.ipynb kcje/state_diagram.png kcje/3_zmienne_wyrazenia_instrukcje.ipynb kcje/3_zmienne_wyrazenia_instrukcje.pdf kcje/.ipynb_checkpoints kcje/preview Jeszcze o przeszukiwaniu katalogów Bardzo przydatnym modułem jest znajdujący się w bibliotece standardowej glob. Pozwala on na używanie dzikich kart w nazwach plikow na zasadach podobnych do powłoki uniksowej: *zastępuje zero lub więcej znaków?zastępuje dokładnie jeden znak nawiasy kwadratowe definiują zakresy, np. [1-9]oznacza dowolną cyfrę między 1 a 9 In [51]: import glob os.chdir('/home/szwabin/dropbox/zaj\xc4\x99cia/pythonintro/6_modul y_i_pliki') Wszystkie pliki o rozszerzeniu ipynb:
27 In [52]: print glob.glob('*.ipynb') ['Chapter8_Modules.ipynb', '6_moduly_i_pliki.ipynb', 'SciPython5.ipy nb', 'SciPython4.ipynb', 'SciPython3.ipynb'] Wszystkie pliki w aktualnym katalogu: In [53]: print glob.glob('*.*') ['5-intro.pdf.gz', 'calc.py', 'modutils.py', 'Chapter8_Modules.ipyn b', '3-intro_utf.pdf', '6_moduly_i_pliki.ipynb', 'box.jpg', 'SciPyth on5.ipynb', 'SciPython4.ipynb', '4-intro.pdf', 'file.txt', 'bpyfd_di ags6.png', 'SciPython3.ipynb'] Pliki o rozszerzeniu składającym się z 3 liter: In [54]: print glob.glob("*.???") ['3-intro_utf.pdf', 'box.jpg', '4-intro.pdf', 'file.txt', 'bpyfd_dia gs6.png'] Pliki o rozszerzeniu składającym się z 3 liter, przy czym pierwszą literą rozszerzenia jest plub t: In [56]: print glob.glob("*.[pt]??") ['3-intro_utf.pdf', '4-intro.pdf', 'file.txt', 'bpyfd_diags6.png']
Język Python (2) Język Python (2) 1/36
Język Python (2) Język Python (2) 1/36 Język Python (2) 2/36 Podstawy funkcji Pojęcia podstawowe Instrukcja def tworzy obiekt funkcji i przypisuje go do nazwy Instrukcja return przekazuje obiekt wynikowy
Bardziej szczegółowoPython wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA
Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający
Bardziej szczegółowoPython. Wprowadzenie. Jolanta Bachan
Python Wprowadzenie Jolanta Bachan Zainstaluj i przetestuj Pythona https://www.python.org/downloads/ print 'Hello world!' operatory numeryczne: + - * / // % ** operatory porównania: ==!= > < >=
Bardziej szczegółowoProgramowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Bardziej szczegółowoSystem operacyjny Linux
Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 6 Język bash Pierwszy skrypt Rozwinięcia parametryczne Bloki instrukcji Dwa przydatne polecenia Tablice Sprawdzanie warunków Instrukcje
Bardziej szczegółowoSkrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:
Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:
Bardziej szczegółowoPodstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski
Podstawy Pythona Krzysztof Gdawiec Instytut Informatyki Uniwersytet Śląski Słownik jest typem mutowalnym. Każdy element to para: klucz wartość. W celu stworzenia słownika pary klucz wartość umieszczamy
Bardziej szczegółowoPodstawy bioinformatyki 2017/18
JEZYK PROGRAMOWANIA PYTHON: WPROWADZANIE DANYCH I FORMATOWANIE WYNIKÓW, WEWNETRZNA DOKUMENTACJA, PROGRAMY I MODUŁY E. Dyguda-Kazimierowicz 1 Formatowanie danych wyjściowych Do formatowania wyświetlanych
Bardziej szczegółowoJęzyk programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.
PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne
Bardziej szczegółowoTrochę o plikach wsadowych (Windows)
Trochę o plikach wsadowych (Windows) Zmienne środowiskowe Zmienną środowiskową można ustawić na stałe w systemie (Panel sterowania->system- >Zaawansowane ustawienia systemu->zmienne środowiskowe) lub też
Bardziej szczegółowoINFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Bardziej szczegółowoPodstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 6 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 21 listopada 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania
Bardziej szczegółowoJęzyk Python. Język Python 1/35
Język Python Język Python 1/35 Język Python 2/35 Wstęp Uruchamianie interpretera python Skrypty wykonywalne #!/usr/bin/python #!/usr/bin/env python lub #!/usr/bin/python3 #!/usr/bin/env python3 chmod +x
Bardziej szczegółowoInformatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Bardziej szczegółowoWstęp do Informatyki dla bioinformatyków
Wstęp do Informatyki dla bioinformatyków Wykład 12 - Programowanie w BASHu Trochę bardziej zaawansowane Bartek Wilczyński 25.1.2016 Organizacyjne Bardzo proszę o wypełnienie ankiet w USOS Szczególnie zależy
Bardziej szczegółowoUwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Bardziej szczegółowoPodstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
Bardziej szczegółowoStałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Bardziej szczegółowolekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
Bardziej szczegółowoNaukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem
Moduł 1 1. Wprowadzenie do języka Python Python jest dynamicznym językiem interpretowanym. Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonać bez potrzeby tłumaczenia kodu programistycznego
Bardziej szczegółowoProgramowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Bardziej szczegółowoBiblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Bardziej szczegółowoZmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.
Zmienne powłoki Zmienne powłoki (shell variables) to tymczasowe zmienne, które mogą przechowywać wartości liczbowe lub ciągi znaków. Związane są z powłoką, Przypisania wartości do zmiennej następuje poprzez
Bardziej szczegółowoOpis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości
Bardziej szczegółowoZaawansowany kurs języka Python
Wykład 4. 23 października 2015 Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Protokół iteracyjny Producent Umiem dostarczać
Bardziej szczegółowoMyśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści
Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy
Bardziej szczegółowoPliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Bardziej szczegółowoJęzyki skryptowe w programie Plans
Języki skryptowe w programie Plans Warsztaty uŝytkowników programu PLANS Kościelisko 2010 Zalety skryptów Automatyzacja powtarzających się czynności Rozszerzenie moŝliwości programu Budowa własnych algorytmów
Bardziej szczegółowoAdministracja sieciowymi systemami operacyjnymi III Klasa - Linux
Administracja sieciowymi systemami operacyjnymi III Klasa - Linux SKRYPTY POWŁOKI mgr inż. Tomasz Borowiec SKRYPTY POWŁOKI - PODSTAWY W Linuksie skrypt jest plikiem tekstowym zawierającym polecenia systemowe
Bardziej szczegółowoKurs rozszerzony języka Python
Wykład 2. 13 października 2017 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Deklaracja klasy Klasy i obiekty Przykłady class Figura: Pierwsza
Bardziej szczegółowoPisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego:
Wyjątki Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego: >>> 1/ File "", line 1, in 1/ ZeroDivisionError: integer
Bardziej szczegółowoZmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Bardziej szczegółowoPROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW
PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW http://metodycy.torun.pl/ m.informatyka@metodycy.torun.pl 1. Wprowadzenie do Pythona podstawowe informacje Python to język programowania wysokiego poziomu,
Bardziej szczegółowoWstęp do informatyki. stęp do informatyki Polecenia (cz.2)
Wstęp do informatyki stęp do informatyki Polecenia (cz.2) Lista procesów top Pokaż listę procesów polecenie interaktywne Procesy Uruchamianie w tle. shell nie czeka na zakończenie procesu, można wydawać
Bardziej szczegółowoŚrodowisko programisty
Środowisko programisty 1/34 Środowisko programisty Język Python cz. 1 dr inż. Grzegorz Michalski 24 marca 2014 Środowisko programisty 2/34 Wstęp Uruchamianie interpretera python Wykonywalne skrypty #!/usr/bin/python
Bardziej szczegółowoSpis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7
Spis treści 1 Funkcje 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 1.5 Zadanie 5 1.6 Zadanie 6 1.7 Zadanie 7 Funkcje Przy programowaniu często zdarza się, że pewne czynności chcemy wykonywać
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowo1 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 1 1/7 Język C Instrukcja laboratoryjna Temat: Programowanie w powłoce bash (shell scripting) 1 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do programowania w powłoce Skrypt powłoki
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program
Bardziej szczegółowoLekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2014 1 / 38 Przypomnienie Programowanie imperatywne Program
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoInformatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)
Informatyka 2015/16 wykład 9 Pliki Sterowanie przebiegiem programu cz. 2 Dr inż. Witold Nocoń (p. 230) Pliki Pliki dzielą się na dwa rodzaje: Pliki tekstowe (zawartość pliku jest typu string) Pliki binarne
Bardziej szczegółowoWstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Bardziej szczegółowoJęzyk skryptowy: Laboratorium 1. Wprowadzenie do języka Python
Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język PYTHON Podstawowe informacje Python to język skryptowy, interpretowany - co oznacza, że piszemy skrypt, a następnie wykonujemy go za
Bardziej szczegółowoWstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Bardziej szczegółowoWidoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Bardziej szczegółowoBash - wprowadzenie. Bash - wprowadzenie 1/39
Bash - wprowadzenie Bash - wprowadzenie 1/39 Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia:
Bardziej szczegółowoWyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w
Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal
Bardziej szczegółowoKurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie
Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie Operacje na plikach Otwarcie i zamknięcie pliku: fh = open('plik', 'r') Atrybuty: 'r' odczyt 'w' zapis 'a' dopisanie 'r+'
Bardziej szczegółowoMetody numeryczne Laboratorium 2
Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania
Bardziej szczegółowoPodstawy bioinformatyki 2017/18
1 Pętla while JEZYK PROGRAMOWANIA PYTHON: PETLE ITERUJACE, KORZYSTANIE Z PLIKÓW E. Dyguda-Kazimierowicz Instrukcja while, wraz z omówioną poniżej instrukcją for, należą do pętli iterujacych pozwalających
Bardziej szczegółowoKurs rozszerzony języka Python
Wykład 1. 6 października 2017 Plan wykładu 1 2 3 4 Plan wykładu 1 2 3 4 Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/ marcinm/dyd/python Materiały
Bardziej szczegółowoPython jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:
W pierwszym kroku nauczymy się uruchamiać w Pythonie tradycyjny* program ". Dzięki temu nauczysz się pisać w języku Python, a także zapisywać i uruchamiać swoje pythonowe programy. *Jest taka tradycja,
Bardziej szczegółowoZaawansowany kurs języka Python
Wykład 1. 4 października 2013 Plan wykładu 1 2 3 4 Typy proste Kolekcje Instrukcje w języku (przypomnienie) Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/
Bardziej szczegółowoPodstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 2 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 10 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania
Bardziej szczegółowoPodstawy i języki programowania
Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof
Bardziej szczegółowoPodstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
Bardziej szczegółowoKier. MTR Programowanie w MATLABie Laboratorium
Kier. MTR Programowanie w MATLABie Laboratorium Ćw. 7 Import i eksport danych. Współpraca z plikami zewnętrznymi 1. Wprowadzenie Eksport i import danych w MATLABie Na zakładce menu HOME w sekcji VARIABLE
Bardziej szczegółowo4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()
4. Pliki 4.1. Informacje ogólne o dostępie do plików w PHP Jak praktycznie każdy język programowania, PHP zapewnia dostęp do systemu plików znajdujących się na komputerze, na którym uruchamiany jest skrypt,
Bardziej szczegółowoPodstawy programowania. Python wykład 6
Podstawy programowania Python wykład 6 Funkcja wbudowana chr() Wywołanie funkcji chr() z argumentem m zwraca łańcuch znaków reprezentujący znak, którego punktem kodowym w Unicode jest liczba całkowita
Bardziej szczegółowoAutor: dr inż. Katarzyna Rudnik
Bazy danych Wykład 2 MS Access Obiekty programu, Reprezentacja danych w tabeli, Indeksy, Relacje i ich sprzężenia Autor: dr inż. Katarzyna Rudnik Obiekty programu MS ACCESS Obiekty typu Tabela są podstawowe
Bardziej szczegółowoTypy danych, cd. Łańcuchy znaków
Typy danych, cd. Łańcuchy znaków Typ danych string, jest rozumiany jako łańcuch znaków - liter, cyfr i symboli. Stringi definiuje się w podwójnych lub pojedyńczych cudzysłowach. typ_ kawy = " latte " typ_herbaty
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoPrzykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1
Rachunek Prawdopodobieństwa i Statystyka lab 3. Kaja Gutowska (Kaja.Gutowska@cs.put.poznan.pl) 1. Funkcje: - Funkcje nie powinny korzystać ze zmiennych globalnych. - Funkcje powinny być możliwie krótkie.
Bardziej szczegółowoPodstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Bardziej szczegółowoSkrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać
MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty
Bardziej szczegółowoSkrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012
Skrypty BASH a Systemy Operacyjne 2 Mateusz Hołenko 4 października 2012 Plan zajęć O skryptach słów kilka... Powłoka, wiersz poleceń Obsługa powłoki bash Składnia języka skryptowego bash a Zadania Mateusz
Bardziej szczegółowo1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE
1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne
Bardziej szczegółowoPodstawy. Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS Informatyka Stosowana
Podstawy 1 Plan prezentacji Garść informacji Komentarze Stringi Wbudowane typy liczbowe Konstrukcja print Pobieranie danych Konstrukcja if Konstrukcja if else Konstrukcja if elif else Pętla while Pętla
Bardziej szczegółowoPolitechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4
Politechnika Łódzka Instytut Systemów Inżynierii Elektrycznej Laboratorium cyfrowej techniki pomiarowej Ćwiczenie 4 Zapis danych do pliku w programie LabVIEW 1. Zapis i odczyt sygnałów pomiarowych Do zapisu
Bardziej szczegółowoPodstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH
Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania weryfikacyjne:
Bardziej szczegółowoObsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
Bardziej szczegółowoTemat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.
Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego. Czas realizacji zajęć: 135 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Zmienne śrowiskowe oraz ich eksportowanie, argumenty
Bardziej szczegółowoSerwer WWW Apache. http://httpd.apache.org/ Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, 2.2.25, 2.0.65 zakończony projekt
Serwer WWW Apache http://httpd.apache.org/ Plik konfiguracyjny httpd.conf Definiujemy m.in.: Katalog który ma być serwowany Moduły, które mają zostać uruchomione na serwerze m.in. PHP, mod_rewrite Wirtualne
Bardziej szczegółowoAlgorytmy i struktury danych
Algorytmy i struktury danych 4. Łódź 2018 Suma szeregu harmonicznego - Wpisz kod programu w oknie edycyjnym - Zapisz kod w pliku harmonic.py - Uruchom skrypt (In[1]: run harmonic.py) - Ten program wykorzystuje
Bardziej szczegółowoĆwiczenie 1. Wprowadzenie do programu Octave
Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do
Bardziej szczegółowoJĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]
JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Marcin Lewandowski [ mlew@ippt.gov.pl ] PYTHON 3 2 Int int jest obecnie odpowiednikiem dawnego long int nie ma wartości maksymalnej (sys.maxint) 2/4 == 0.5
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoNazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek
Nazwa implementacji: Nauka języka Python pętla for Autor: Piotr Fiorek Opis implementacji: Poznanie innego rodzaju pętli, jaką jest pętla for w języku Python. Składnia pętli for jest następująca: for
Bardziej szczegółowoProgramowanie 3 - Funkcje, pliki i klasy
Instytut Informatyki Uniwersytetu Śląskiego Laborki funkcja; parametry funkcji; typ zwracany; typ void; funkcje bez parametrów; napis.length() - jako przykład funkcji. Zadania funkcja dodająca dwie liczby;
Bardziej szczegółowoPodstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Bardziej szczegółowoUmieszczanie kodu. kod skryptu
PHP Definicja PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona
Bardziej szczegółowoProgramowanie w językach wysokiego poziomu
Programowanie w językach wysokiego poziomu zajęcia nr 2 Elektronika i Telekomunikacja, semestr III rok akademicki 2014/2015 Plan dzisiejszych zajęć Pliki tekstowe 1. Operacje na plikach - wprowadzenie
Bardziej szczegółowoPliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną
Bardziej szczegółowoPliki. Operacje na plikach w Pascalu
Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie
Bardziej szczegółowoWYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA
WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA PRZEDMIOT : : LABORATORIUM PODSTAW AUTOMATYKI 1. WSTĘP DO
Bardziej szczegółowoPodstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16
M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16
Bardziej szczegółowoProgram wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:
Rozdział 1 Obsługa plików W językach C pliki powiązane są ze strumieniami i pracuje się na nich podobnie jak na innych strumieniach. W języku C do operacji na plikach służą funkcje z biblioteki stdio.h,
Bardziej szczegółowoSystem operacyjny Linux
Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 7 Język awk Wprowadzenie Schemat programu Konstrukcja wzorców Konstrukcja wyrażeń regularnych Struktury kontrolne Predefiniowane
Bardziej szczegółowoOczywiście plik musi mieć rozszerzenie *.php
Oczywiście plik musi mieć rozszerzenie *.php Znaczniki PHP komunikują serwerowi gdzie rozpoczyna się i kończy kod PHP. Tekst między nimi jest interpretowany jako kod PHP, natomiast poza nimi jako kod HTML.
Bardziej szczegółowoWykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim
Bardziej szczegółowoPodstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Bardziej szczegółowoWykład 4. Tablice. Pliki
Informatyka I Wykład 4. Tablice. Pliki Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Tablice Tablica uporządkowany zbiór elementów określonego typu Każdy element tablicy posiada
Bardziej szczegółowo