Wykład 3: Środowisko
__init__.py sys.path __path__
Pliki .pth DOS
LINUX
#!/bin/csh
# nadaj prawa (chmod +x runpython)
# umiesc te informacje w zbiorze .cshrc set path=(/usr/local/bin $path)
setenv PYTHONPATH /usr/local/lib/python
setenv PYTHONSTARTUP /usr/local/main/program.py python
Środowisko i tryb programowy
Zmienna Opis
PYTHONPATH ścieżka wyszukiwania modułów (zob. sys.path ) PYTHONSTARTUP Program .exe wykonywany przed uruchomieniem
trybu interaktywnego
PYTHONHOME W którym katalogu zainstalowano PYTHONa PYTHONINSPECT Interpreter będzie używał opcji -i
PYTHONUNBUFFERED Interpreter będzie używał opcji -u
PYTHONCASEOK Wskazuje nazwy modułów, które PYTHON
zaimportuje
Moduły
# 1. Importujemy caly modul import liczby
a = liczby.silnia(7)
# 2. Importujemy modul pod inna nazwa import liczby as num
a = num.silnia(7)
# 3. Importujemy jedna lub kilka wybranych funkcji from liczby import silnia, fibonacci
a=silnia(7)
# 4. Importujemy wszystkie funkcje z modulu from liczby import *
a=silnia(7)
Pliki
open(path [, mode [,buffersize]])
Tryb Opis
r
Otwiera istniejący plik do odczytu
w
Otwiera plik do zapisu. Jeśli plik już istnieje, jego zawartość jest kasowana. Jeśli plik jeszcze nie istnieje to tworzony jest nowy
aOtwiera istniejący plik do uaktualnienia, zachowując istniejącą treść
bez zmian i dopisując do niej nową treść
r+
Otwiera plik zarówno do zapisu jak i odczytu. Istniejąca treść pozostaje nietknięta
w+
Otwiera plik zarówno do zapisu jak i odczytu. Istniejąca treść jest kasowana.
a+
Otwiera istniejący plik zarówno do odczytu jak i do uaktualnienia, zachowując istniejącą treść bez zmian i dopisując do niej nową treść
bStosowana w dodatku do powyższych opcji. Otwiera plik w trybie
binarnym.
U
Stosowana w dodatku do powyższych opcji. Stosuje “uniwersalny”
translator nowych wierszy do otwieranego pliku
aPliki - wczytywanie
# Zawartość całego pliku w buffer file=open(”plik.txt”, ’rU’)
buffer=”Zawartość ’plik.txt’: ” buffer+=file.read()
file.close()
# Dodanie kolejnego wiersza do buffer file=open(”plik.txt”, ’rU ’)
inList=file.readlines() # Zawartość pliku w formie listy
buffer+=’ ’.join(inList)
buffer=”Zawartość ’plik.txt’ dodawany wierszami:”
for line in inList:
buffer+=line file.close()
buffer=”Wczytywanie ’plik.txt’ porcjami po 8 bajtów:”
file=open(”plik.txt”,’rU’) while (1):
bytes=file.read(8) if bytes:
buffer+=bytes # Dopisanie 8 kolejnych bajtów
else:
break file.close()
file=open(”plik.txt”,’rU’) wordlist=[]
wordCount=0
for line in file: # Uwaga na tę iterację!!
for word in line.split():
wordlist.append(word)
# dodajemy słowa do listy
wordCount+=1
file.close()
Pliki – moduł linecache
getline(filename, lineno) - wczytuje linię numer lineno z pliku o nazwie filename, zapamiętuje tę linię w pamięci podręcznej (cache) oraz zwraca tę linię w formie łańcucha znaków. Przy następnym wywołaniu, jeśli to jest możliwe korzysta z pamięci cache a nie z pliku. Jeśli
nazwa filename nie istnieje, funkcja będzie przeszukiwać według kolejności przeszukiwania katalogów(sys.path()).
getlines(filename)- wczytuje wszystkie wiersze z pliku filename do listy
clearcache () - czyści cache. Używaj tej funkcji jeśli nie będziesz już potrzebował wierszy
z tego zbioru czytanych przez getline().
checkcache() - sprawdza czy dalej cache jest ważny.
Pliki - zapisywanie
# Zawartość całego pliku w buffer file=open(”plik.txt”, ’rU’)
buffer=”Zawartość ’plik.txt’: ” buffer+=file.read()
file.close()
# Dodanie kolejnego wiersza do buffer file=open(”plik.txt”, ’rU ’)
inList=file.readlines() # Zawartość pliku w formie listy
buffer+=’ ’.join(inList)
buffer=”Zawartość ’plik.txt’ dodawany wierszami:”
for line in inList:
buffer+=line file.close()
buffer=”Wczytywanie ’plik.txt’ porcjami po 8 bajtów:”
file=open(”plik.txt”,’rU’) while (1):
bytes=file.read(8) if bytes:
buffer+=bytes # Dopisanie 8 kolejnych bajtów
else:
break file.close()
file=open(”plik.txt”,’rU’) wordlist=[]
wordCount=0
for line in file: # Uwaga na tę iterację!!
for word in line.split():
wordlist.append(word)
# dodajemy słowa do listy
wordCount+=1
file.close()
Pliki - wczytywanie
# Zapis wierszami
wordList[”Kowalski Jan”, ”Wiśniewski Michał”, ”Doda Elektroda”]
fileout=”zapis.doc”
file=open(fileout, ’wU’)
file.writelines(wordList)
# Zapis całości buffer=””
for a in wordList:
buffer+=a file.write(a)
# Zapis instrukcją print for a in wordList:
print >>file, ”\t Pracownik: %s”,a
file.close()
Atrybuty i metody obiektu file
Atrybut Znaczenie
f.close() Zamyka zbiór. Nie można nic wykonywać na zbiorze po jego zamknięciu. Wielokrotne użycie f.close() nie powo- duje błędu.
f.closed Przyjmuje wartość True jeśli było użyte f.close() i zbiór jest zamknięty. W przeciwnym razie przyjmuje wartość False.
f.encoding Atrybut tylko do odczytu. Może to być np.: ‘ascii’,
‘latin-1’ (lub „iso-8859-1’), ‘utf-8’, ‘utf-16’, ‘utf-16-le’,
‘utf-16-be’. Może być ustawiany tylko dla atrybutów stdin, stdout i stderr modułu sys
f.flush() Wymaganie aby zbiór f był buforowany przed zapisem przez system operacyjny
f.isatty() Zwraca True jeśli f jest zbiorem na interaktywnym terminalu, w przeciwnym razie False.
f.fileno() Zwraca liczbę całkowitą która jest deskryptorem zbioru w systemie operacyjnym
f.mode Jest to atrybut tylko do odczytu, mówi w jakim trybie plik został otworzony (metodą open)
f.name Również atrybut tylko do odczytu, mówi nam z jaką nazwą zbioru plik został otworzony metodą open.
f.newlines Atrybut tylko do odczytu. Może to być jeden z łańcuchów
‘\n’, ‘\r’ lub ‘\r\n’ (gdy linie w pliku są w ten sposób oddzielane); krotka, gdy linie mają różne separatory i None, kiedy nie ma separatora linii lub f zostało otwarte w trybie ‘U’.
f.read(size=1) Czyta maksymalnie (gdy może ze zbioru) size bajtów ze zbioru f od bieżącej pozycji i zwraca je jako łańcuch. Gdy size<0 czyta wszystkie bajty do końca. Gdy pierwszym napotkanym znakiem jest EOF, lub size=0 zwraca pusty łańcuch.
f.readline(size=1) Czyta i zwraca jeden wiersz ze zbioru aż do napotkania znaku końca linii ‘\n’ włącznie. Jeśli size jest większe bądź równe 0 f.readline czyta nie więcej niż size bajtów.
W tym przypadku zwracany łańcuch może nie kończyć się
Atrybuty i metody obiektu file cd
f.seek(pos,
how=0) Ustawia bieżącą pozycję w zbiorze f na (dodatnią lub ujemną) liczbę całkowitą bajtów pos w stosunku do ustalonego punktu. Tym punktem może być początek zbioru (how = 0), aktualna pozycja (how =1) i koniec zbioru (how= 2). Moduł os ma atrybuty SEEK_SET, SEEK_CUR, i SEEK_END, z wartościami 0, 1 i 2, odpowiednio. Kiedy f jest otwarte w trybie tekstowym f.seek może ustawić bieżącą pozycję w nieoczekiwany sposób (w WINDOWS), wtedy należy otwierać f w trybie binarnym lub użyć f.seek z pos=f.tell() a how=0.
f.softspace Zapisywalny atrybut typu logicznego używany wewnętrznie przez instrukcję print
f.tell() Zwraca bieżącą pozycję w zbiorze
f.truncate([size]) Obcina zbiór f. Kiedy podany jest parametr size usuwa ze zbioru size bajtów, a kiedy nie ma size usuwa wszystko od f.tell() do końca zbioru.
f.write(s) Zapisuje łańcuch s do zbioru.
f.writelines(lst) Działa tak jak:
for line in lst:
f.write(line)
gdzie lst jest listą lub krotką.
Moduł os
os.errno
os.name
os.path
popen(command[, tryb[, rozmiar_bufora]]) - polecenie to otwiera potok powiązany z nowym procesem wykonującym
command. Zwracaną wartością jest otwarty obiekt plikowy
powiązany z potokiem, który może służyć do odczytu lub zapisu, zależnie od tego, czy wartością parametru tryb jest ‘r’ (domyślnie) czy też ‘w’.
walk(top[, topdown=True [, onerror=None]]) - Funkcja ta przechodzi drzewo katalogów i tworzy dla nich krotkę składającą się z:
1. Ścieżka katalogu
2. Lista nazw katalogów 3. Lista nazw plików
Argument topdown ustala w jakiej kolejności mają być
generowane katalogi
Inne funkcje modułu OS
os.path.getsize(filename) - rozmiar w bajtach filename (os.error jeśli zbiór nie istnieje).
mkdir(path[, tryb]) - tworzy katalog path z numerycznym trybem (domyślny 0777 – ósemkowo).
remove(path) - usuwa path. Jeśli path jest katalogiem pojawia się os.error.
removedirs(ścieżka) - usuwa katalog z podkatalogami.
rename(src, dst) - zmienia nazwę zbioru lub katalogu.
rmdir(path) - usuwa katalog path.
environ - obiekt reprezentujący środowisko, np. wartością wyrażenia environ[’HOME’] jest ścieżką katalogu domowego bieżącego użytkownika.
getlogin() - nazwa użytkownika zalogowanego przy użyciu terminala w UNIX
getpid() - identyfikator bieżącego procesu. Dostępność: UNIX, WINDOWS.
getenv(nazwa_zmiennej[, wartość]) - jeśli istnieje zmienna środowiskowa o nazwie nazwa_zmiennej, zwraca jej wartość, w przeciwnym wypadku zwracany jest argument wartość.
putenv(nazwa_zmiennej, wartość) - ustawia wartość zmiennej środowiskowej o nazwie nazwa_zmiennej na napis wartość. Dokonane w ten sposób zmiany w środowisku wpływają na procesy potomne, utworzone przy pomocy funkcji os.system(), popen() lub fork() i execv().
strerror(kod) - zwraca komunikat opisujący błąd o kodzie kod.
uname() - pięcioelementowa krotkę zawierającą informacje służące identyfikacji
używanego systemu operacyjnego. Na krotkę składa się: (nazwa systemu, nazwa węzła, wydanie, wersja, maszyna).
Moduł glob
import glob
glob.glob(’*’) [’cos-ph.html’,’python2.5.tar.gz’, ’cos-ph1a.html’,’cos-pu2.html’,
’work1’]
glob.glob(’[acu]os*.ht??’) [’cos-ph.html’,’cos- ph1a.html’,’cos-pu2.html’]
glob.glob(’work/*’) [’work\\more’, ’work1\\new1’,
’work1\\new2’,’work1\\new3’]
Moduł tar
import os, tarfile
fileTar=tarfile.open(”my.tar”,’w’) f=”C:/Python27/zbior.py”
fileTar.add(f)
t=fileTar.getnames()
fileTar.extract(f,extractPath)
fileTar.close()
Moduł zip
import os, zipfile
fileZip=zipfile.ZipFile(”my.zip”,’w’) f=”C:/Python27/zbior.py
fileZip.write(f) fileZip.namelist() fileZip.close()
fileZip.read(f)
Moduły Pickle i cPickle
pickle mamy następujące funkcje:
dump(object, file[, bin]) - Zapisuje obiekt object do otwartego zbioru file (funkcja ta jest równoważna
poleceniu Pickler(file, bin).dump(object). Jeśli argument bin jest True format marynowanego zbioru jest binarny a w przeciwnym razie tekstowy.
load(file) - Czyta łańcuch z otwartego zbioru file i interpretuje go jako strumień danych marynowanych.
(równoważne Unpickler(file).load()).
dumps(object[, bin]) - Zwraca zamarynowaną
reprezentację obiektu jako łańcuch zamiast zapisać go do zbioru. Parametr bin jak w metodzie dump.
loads(string) - Czyta hierarchię zamarynowanych
obiektów z łańcucha.
Moduł time
Krotka tupletime
Index Pole Wartość
0 year (np., 1993) 1 month range [1,12]
2 day range [1,31]
3 hour range [0,23]
4 minute range [0,59]
5 second range [0,61]
6 weekday range [0,6], Poniedziałek to 0 7 Julian day range [1,366]
8 daylight savings flag 0, 1 lub -1;
Moduł time
asctime([tupletime]) - konwertuje opisaną powyżej tupletime na 24- znakowy napis np.: ‘Sun Jun 20 23:21:05 1993’. Napis taki będziemy dalej nazywać stringtime. Jeśli nie ma tupletime bieżący czas jest w ten sposób zwracany.
ctime([secs]) - konwertuje czas w sekundach secs od chwili, gdy zegar wystartował (zazwyczaj 1.01.1970) na stringtime. Jeśli secs nie występuje zwracany jest czas bieżący.
gmtime([secs]) - konwertuje czas w sekundach secs od chwili gdy zegar wystartował (zazwyczaj 1.01.1970) na tupletime. Jeśli secs nie występuje zwracany jest czas bieżący.
localtime([secs]) - podobnie jak gmtime() ale konwertuje na czas lokalny.
mktime(tupletime) - odwrotna funkcja do localtime().
sleep(secs) - zawiesza wykonanie programu na określoną w secs ilość sekund.
strftime(format[, tupletime]) - konwertuje tupletime zwracane przez gmtime() lub localtime() do łańcucha wyszczególnionego przez format. Jeśli tupletime nie występuje, zwracany jest czas bieżący.
time() - zwraca czas jako liczbę float wyrażając w sekundach od chwili gdy zegar wystartował.
timezone - zwraca strefę czasową.
Moduł threading
class Thread (group=None, target=None, name=None, args=(), kwargs={})
Argumentami są:
◦ group powinno być None; dla dalszych zastosowań
◦ target obiekt wywoływalny na który powołuje się metoda run().
◦ name jest nazwą wątku. Domyślnie jest konstruowana na zasadzie ‘Thread-N’ gdzie N to kolejna liczba
◦ args krotka argumentów które target wywołuje
◦ kwargs słownika argumentów które target wywołuje.
Jeśli podklasa nadpisuje konstruktor to konstruktor Thread.__init__() też powinien być wywołany.
start()
start wątków (musi być wywołane raz na otwarcie procesów wielowątkowych).
run()
metoda uruchamiająca aktywność wątku.
join([timeout])
czeka aż wątek (normalnie lub z błędem) skończy się.
getName()
zwraca nazwę wątku.
setName(name)
ustawia nazwę wątku.
isAlive()
zwraca informację czy wątek “pracuje”.
Moduł threading
obiekt Timer
class Timer(interval, function, args=[], kwargs={})
Tworzy timer który wywoła funkcję function z argumentami args i/lub słownikiem argumentów kwargs, po interval sekundach.
cancel() - zatrzymuje timer i wstrzymuje wykonanie funkcji function. Możliwe jest
wstrzymanie tylko wtedy gdy timer czeka a nie gdy wykonuje funkcję function.
Można ten obiekt wykorzystać do przerwań
zegarowych.
Moduł queue
Kolejki FIFO
class Queue(maxsize)
maxsize jest liczbą całkowitą, która jest górną granicą liczby elementów w kolejce. Jeśli maxsize jest mniejsze bądź równe 0 rozmiar kolejki jest nieskończony.
Metody tej klasy to:
qsize() zwraca przybliżony rozmiar kolejki
empty() zwraca 1 jeśli kolejka jest pusta i 0 w przeciwnym razie
full() zwraca 1 jeśli kolejka jest pełna i 0 w przeciwnym razie
put(item[, block]) wstawia item do kolejki. Jeśli opcjonalny argument block jest 1 (domyślne) blokuje, jeśli trzeba, dopóki wolny slot nie będzie dostępny. W przeciwnym razie (block jest 0) wstawia item do kolejki jeśli wolny slot jest dostępny, a jeśli nie pojawia się wyjątek Full exception.