Język PYTHON ‑ narzędzie dla każdego naukowca

advertisement
JĘZYK PYTHON
- NARZĘDZIE DLA KAŻDEGO NAUKOWCA
Marcin Lewandowski
[ [email protected] ]
PLIKI, DANE, FORMATY, KONWERSJE
2
Moduły do obsługi plików
• sys, os, os.path – podstawowe funkcje plikowe
• fileinput – otwiera i czyta pliki podane w linii poleceń, czyli
sys.argv[1:]; domyślnie sys.stdin
import fileinput
for line in fileinput.input():
process(line)
• tempfile – do tworzenia tymczasowych plików i katalogów
• shutil – wysokopoziomowe operacja na plikach (np. copytree,
rmtree)
• glob, fnmatch – wyszukiwanie i dopasowywanie nazw plików
na podstawie wyrażeń regularnych
Patrz dokumentacja PYTHON i slajdy z zeszłego semestru
3
Moduł os – standardowe wej./wyj.
• sys.stdin – obiekt plikowy: standardowe wejście;
domyślnie podłączony do konsoli (używany np. przez
raw_input()). Dostępny także przez sys.stdin.read()
oraz inne standardowe funkcje plikowe.
• sys.stdout – obiekt plikowy: standardowe wyjście;
domyślnie podłączony do konsoli (używany np. przez
print). Dostępny także przez sys.stdout.write() oraz
inne standardowe funkcje plikowe.
• sys.stderr – obiekt plikowy: standardowe wyjście
błędów; domyślnie podłączony do konsoli (używany np.
przez print). Dostępny także przez sys.stderr.write()
oraz inne standardowe funkcje plikowe.
4
Moduł os – os.stat()
• os.stat() – zwraca informację o pliku w formie listy:
– st_mode (protection bits), st_ino (inode number), st_dev
(device), st_nlink (number of hard links), st_uid (user id of
owner), st_gid (group id of owner), st_size (size of file, in bytes),
st_atime (time of most recent access), st_mtime (time of most
recent content modification), st_ctime (platform dependent;
time of most recent metadata change on Unix, or the time of
creation on Windows)
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L,
1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
5
Moduł os, os.stat
• os.stat – zawiera stałe i funkcje do interpretacji informacji z funkcji:
os.stat(), os.fstat(), os.lstat()
import os, sys
from stat import *
top = r’.’
for f in os.listdir(top):
pathname = os.path.join(top, f)
file_stat = os.stat(pathname)
if S_ISDIR(file_stat[ST_MODE]):
print pathname, ’is a directory’
elif S_ISREG(file_stat[ST_MODE]):
print pathname, ’is a file of size’,
file_stat[ST_SIZE]
else: # Unknown file type
print 'Skipping %s' % pathname
6
Moduł tempfile
• TemporaryFile(mode=’w+b’, bufsize=-1, suffix=”, prefix=’tmp’,
dir=None) – tworzy plik tymczasowy, który jest automatycznie
kasowany przy zamknięciu
• NamedTemporaryFile(mode=’w+b’, bufsize=-1, suffix=”,
prefix=’tmp’, dir=None, delete=True) – j.w. ale z opcją wyłączenia
kasowania pliku oraz zapewnioną widocznością pliku w systemie
plików
• (fd, name) = mkstemp(suffix=”, prefix=’tmp’, dir=None, text=False) –
tworzy plik tymczasowy. Kasowanie pliku wymaga użycia
os.remove()
import tempfile, os
fd, tempName = tempfile.mkstemp('.dat')
temp = open( tempName, 'w+' )
# Some Processing...
7
Moduł shutil
• shutil ułatwia kopiowanie i usuwanie całych
katalogów:
– copy(source, destination) – kopiuje pliki i/lub katalogi
(odpowiednik komendy UNIX ‘cp src dst’)
– copyfile(source, destination) – j.w. ale kopiuje tylko
pliki
– copytree(source, destination) – rekursywnie kopiuje
całe poddrzewo katalogów; destination nie może
istnieć!
– rmtree(path) – usuwa drzewo katalogów poniżej path
8
Moduł glob
• UNIX – powłoka (shell) robi to automatycznie;
Windows NIE!
• Globbing plików z linii poleceń:
# python script.py *.txt *.csv
import glob, sys
for arg in sys.argv[1:]:
for f in glob.glob(arg):
process( f )
9
Moduł fnmatch
• Dopasowywanie nazw plików wg. reguł UNIX:
import fnmatch
>>> fnmatch.fnmatch('greppy.py','*.py')
True
>>> fnmatch.fnmatch('README','*.py')
False
10
Moduły do obsługi plików
skompresowanych
• tarfile, zipfile – obsługa (odczyt/zapis) plików
archiwów w formatach TAR (.tar, .tgz, .tar.gz) i
ZIP
• zlib, bz2, gzip – moduły do obsługi bezstratnej
kompresji/dekompresji plików i danych
• Moduł gzip ma prosty interfejs i działa tylko na
całych plikach
11
Moduł zipfile
• Pełna obsługa struktury plików ZIP
# Creates ZIP file form *.xml in given directory
import zipfile, os, fnmatch
path = r'.'
zf = zipfile.ZipFile('book.zip', 'w',
zipfile.ZIP_DEFLATED)
for nm in os.listdir(path):
if fnmatch.fnmatch(nm,'*.xml'):
full = os.path.join(path, nm)
zf.write(full)
zf.close()
Patrz dokumentacja PYTHON
12
EX
ZIP wybranych plików
• ZIP plików z wybranych katalogów na
podstawie ich specyfikacji w linii poleceń
13
Moduły do serializacji/persystencji
obiektów
• pickle, shelve – modułu pozwalają na zachowywanie i odtwarzanie
obiektów Pythona do/z plików (tzw. persystencja obiektów) lub buforów
danych (tzw. serializacja).
– pickle używa reprezentacji tekstowej (ASCII)
– shelve używa formatu bazy danych dbm
• Obiekty, które poddają się pickle:
– None, True, False
– Zmienne typów prostych (całkowitoliczbowe, zmiennoprzecinkowe,
zespolone)
– Stringi ASCII i Unicode
– Listy, listy niemodyfikowalne, słowniki, zbiory, zawierające tylko obiekty
pickl’owalne
– Funkcje zdefiniowane na najwyższym poziomie modułu
– Klasy zdefiniowane na najwyższym poziomie modułu
– Instancje takich klas, których __dict__ lub __setstate__() są pickl’owalne
14
pickle
>>> import cPickle as pickle
>>> t1 = ('this is a string', 42, [1, 2, 3], None)
>>> p1 = pickle.dumps(t1)
>>> p1
"(S'this is a
string'\nI42\n(lp1\nI1\naI2\naI3\naNtp2\n."
>>> t2 = pickle.loads(p1)
>>> t2
('this is a string', 42, [1, 2, 3], None)
>>> p2 = pickle.dumps(t1, True)
15
Moduły do obsługi formatów MIME
• email – obsługa plików załączników email w formacie MIME
• mailbox – obsługa skrzynki pocztowej typu Mailbox w
różnych formatach
• mimetypes – obsługa typów MIME oraz mapowania na
rozszerzenia plików
• binascii – moduł do konwersji pomiędzy różnymi
reprezentacjami danych binarnymi/tekstowymi (uu,
base64, binhex)
– base64 – enkoder/dekoder dla MIME Base16, Base32, Base64
– binhex – enkoder/dekoder dla binhex4
– uu – enkoder/dekoder dla uuencode
• quopri – enkoder/dekoder danych w formacie MIME
quoted-printable
16
Moduły do baz danych
• anydbm (dbm w Python 3+) – generyczny moduł
obsługi baz danych z interfejsem dbm:
– dbhash – interfejs do baz Berkeley DB
– dumbdbm – przenośna implementacja interfejsu dbm
– gdbm – interfejs do baz dbm GNU
• DB-API 2.0 – specyfikacja interfejsu Pythona do baz
danych (http://www.python.org/dev/peps/pep-0249);
sterowniki do baz danych: ODBC, ADO, IBM DB2,
Firebird, Informix, Ingres, MySQL, Oracle, PostgreSQL,
SAP DB, MS SQL Server, Sybase
• sqlite3 – funkcjonalność bazy danych SQLite
17
Bazy danych – typy
• Relacyjne (RDBMS)
• Obiektowe
• Kartotekowe (ISAM – Indexed Sequential
Access Method)
• DB-style
18
Pojęcia baz danych
• Baza danych to zbiór danych zapisanych w ściśle określony
sposób w strukturach odpowiadających założonemu
modelowi danych
(potocznie: dane + system zarządzania/oprogramowanie)
• Model danych to zestaw zasad/reguł wg. których
opisywane/pamiętane są dane
• Schema to opis/struktura opisująca konkretną kolekcję
danych przy pomocy danego modelu danych
• Relacyjny model danych –a obecnie najpowszechniejszy:
– Relacja: powiązanie pomiędzy tabelami; tabele z wierszami
(rekordami), rekordy z polami
– Każda relacja posiada schema, która opisuje strukturę tabel i
zależności
19
DBMS – Data Base Management
Systems
Aplikacja
System
Bazy danych
DBMS
Aplikacja
Aplikacja
Schemat
Baza
danych
20
Transakcje – ACID
• Transakcja – sekwencja operacji na bazie
danych: odczyt/modyfikacja/zapis
• Właściwość ACID transakcji:
– Atomicity – atomowość operacji (tzw. wszystkoalbo-nic);
– Consistent – spójność stanu bazy danych
– Isolation – izolacja równolegle zleconych transakcji
– Durability – trwałość rezultatu transakcji (nawet w
wypadku padu DBMS)
21
SQL – Structured Query Language
• DDL: Data Definition Language
– Używany do tworzenia i zarządzania strukturami
bazy danych (tabele)
• DCL: Data Control Language
– Używany do określania praw dostępu
• DML: Data Manipulation Language
– Używany do dostępu do danych do bazy danych
22
SQL c.d.
• DDL: Data Definition Language
CREATE TABLE employee
(id serial NOT NULL,
name varchar(50),
address varchar(50),
CONSTRAINT ”id" PRIMARY KEY (id));
• DCL: Data Control Language
GRANT SELECT, UPDATE (name, address) ON employee TO
steve
• DML: Data Manipulation Language
SELECT name, address
FROM employee
ORDER BY name
23
anydbm
import anydbm
# Open database, creating it if necessary
db = anydbm.open('cache', 'c')
# Record some values
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Loop through contents.
# Other dict methods: .keys(), .values() also work
for k, v in db.iteritems():
print k, '\t', v
db.close()
# Close when done
24
SQLite
http://www.sqlite.org
• ‚Zero confguration’ – nie wymaga administratora
• Przenośność: Windows, Linux, OS X, Solaris,
HPUX, AIX; architektury 16, 32, 64-bit
• Kompaktowa – małe wymagania pamięciowe
• W formie biblioteki (nie posiada procesu serwera)
• Open source (GPL)
• Ograniczenia:
– lokalna – brak dostępu sieciowego
– jeden zapis w jednym czasie
–…
25
EX
Import danych z CSV do SQLite3
• DB SQL
– Wczytać przykładowy plik CSV o nazwie data.csv
– Utworzyć bazę i załadować do niej dane
26
Moduły do obsługi wybranych
formatów
• csv – obsługa plików w formacie CSV
(wbudowany)
• h5py – obsługa plików w formacie HDF5
(http://h5py.googlecode.com)
27
Pliki CSV – moduł CSV
• csv.reader(csvfile[, dialect='excel'][, fmtparam]) –
zwraca obiekt typu reader dla pliku CSV.
import csv
cr = csv.reader(open('plik.csv'),
delimiter=',', quotechar=‘”')
for row in cr:
print ':'.join(row)
28
CSV z obsługą błędów
import csv, sys
fn = "some.csv"
reader = csv.reader(open(fn, "rb"))
try:
for row in reader: print row
except csv.Error, e:
sys.exit('file %s, line %d: %s' %
(filename, reader.line_num, e))
29
EX1
Odczyt pliku CSV
• Używając modułu CSV:
– Wczytać przykładowy plik CSV o nazwie test.csv
– Wyświetlić wszystkie elementy wiersz-po-wierszu i
kolumna-po-kolumnie z informacją z nagłówka
30
EX2
Konwersja separatorów
• Używając modułu CSV:
– Wczytać przykładowy plik CSV o nazwie test.csv
– Przekonwertować separatory na „\t” (tab)
– Zapisać rezultat do pliku ttest.csv
31
HDF5
• Hierarchical Data Format (HDF, HDF4, HDF5 ) –
określa format oraz zestaw bibliotek do
zachowywania i manipulowania BARDZO DUŻYMI
zestawami danych numerycznych
• Oryginalnie opracowany w National Center for
Supercomputing Applications, obecnie rozwijany i
wspierany przez organizację non-profit The HDF
Group (http://www.hdfgroup.com)
• OTWARTY!!!
32
HDF5 cechy
• Uniwersalny i hierarchiczny model danych pozwala na
reprezentację złożonych struktur danych oraz
metadanych (a’la system plikowy w pliku)
• W pełni przenośny pomiędzy różnymi platformami
• Obsługa plików > 2GB
• OFICJALNE biblioteki dla: C, C++, Fortran 90, Java
• INNE biblioteki: Matlab (7+), Perl, Python
• Dostępne narzędzia do zarządzania, przeglądania,
analizy i manipulacji
33
HDF5 struktura
• HDF5 jest hierarchiczny – struktury: Groups &
Datasets
• Dodatkowo Attributes mogą być przypisane do
danego Dataset
• HDF5 Groups zawierają:
– Strukturę grupującą 0 lub więcej Groups lub Datasets
– Dodatkowe metadane
• HDF5 Datasets zawiera:
– Nagłówek danych
– Tablicę danych
34
Structures to organize
objects
“Groups”
“/” (root)
3-D array
“/foo”
lat | lon | temp
----|-----|----12 | 23 | 3.1
15 | 24 | 4.2
17 | 21 | 3.6
palette
Table
Raster image
Raster image
“Datasets”
2-D array
35
HDF5 Dataset
• Klasy informacji w nagłówku Dataset:
– Nazwa Datasetu – string ASCII
– Typ danych:
• Atomowe – np. integer, float
• Złożone – struktury
– Przestrzeń danych – określa liczbę wymiarów Datasetu
(nielimitowana)
– Układ Datasetu:
• Ciągły (domyślny)
• Blokowy – w równych „kawałkach” zapamiętywanych w
różnych częściach pliku (w celu optymalizacji I/O)
36
HDF5 Dataset
Metadata
Data
Dataspace
Rank Dimensions
3
Datatype
Dim_1 = 4
Dim_2 = 5
Dim_3 = 7
Integer
(optional)
Attributes
Properties
Time = 32.4
Chunked
Pressure = 987
Compressed
Temp = 56
Na podstawie:Introduction to HDF5 by Barbara Jones, The HDF Group, The 13th
HDF & HDF-EOS Workshop, November 3-5, 2009
37
HDF5 typy
danych
38
HDF5 Attributes
• Attributes – „małe” nazwane Datasety
związane z głównymi Datasets, Groups lub
nazwanymi typami danych
• Używane do opisu danych (metadane)
• Attribute składają się z:
– Nazwy
– Wartości
• Attributes są pamiętane w nagłówkach
obiektów, których dotyczą
39
HDFView – przeglądarka HDF5
40
HDF5 i Matlab
• Domyślny format plików MAT od wersji 7.3+
• Funkcje wysokiego poziomu – zapis/odczyt
plików MAT (workspace)
• Funkcje niskiego poziomu (300 funkcji) –
bezpośredni dostęp do biblioteki C API
Patrz: MATLABR 7 Programming Fundamentals
41
HDF5-Matlab funkcje wysokiego
poziomu
• hdf5info
• hdf5read
• hdf5write
42
hdf5info
fileinfo = hdf5info(filename)
fileinfo =
hdf5info(...,'ReadAttributes',BOOL)
[...] = hdf5info(..., 'V71Dimensions', BOOL)
•
Przykład:
fileinfo = hdf5info('example.h5')
fileinfo =
Filename: 'example.h5'
LibVersion: '1.8.3'
Offset: 0
FileSize: 8172
GroupHierarchy: [1x1 struct]
43
hdf5read
data = hdf5read(filename,datasetname)
attr = hdf5read(filename,attributename)
[data, attr] =
hdf5read(...,'ReadAttributes',BOOL)
data = hdf5read(hinfo)
[...] = hdf5read(..., 'V71Dimensions', BOOL)
44
HDF5 i Python
• h5py (http://h5py.googlecode.com)
• NumPy (http://new.scipy.org)
• Test:
>>> import h5py.tests
>>> h5py.tests.runtests()
45
EX: hdf5
Konwersja pliku tekstowego do HDF5
• Skrypt T2Hconverter.py służy do konwersji
pliku tekstowego (TXT), z danymi
przykładowymi, do formatu HDF5
• Jako wynik otrzymujemy plik HDF5 (H5) o
nazwie identycznej z nazwą pliku danych
T2Hconverter [nazwa pliku danych]
46
Tekstowe dane wejściowe
------- listing pliku dane.txt ----------------------------------------------; Przykładowy plik z danymi pomiarowymi.
; Średnik na początku linii oznacza komentarz
; Format danych:
; Czas [s] (float), Temperatura [st. C] (float)
0,25.6
5,27.3
10,29.1
15,30.7
20,31.2
25,34.5
30,42.2
35,37.5
40,32.0
45,27.6
50,25.3
55,25.1
60,25.0
-------- koniec listingu ------------------------------------------------------
47
Struktura pliku wynikowego HDF5
/ROOT
|
|----Header
|
|
|
|- ConversionDate
|
|
|
|- Description
|
|
|
|- ScriptVersion
(pomnożona x10)
|
|----Data
|
|
|
|- Values
(float)
czas, rząd 2 - temp )
(string) data i czas konwersji
(string) opis pliku
(int) wersja skryptu zapisu
macierz danych ( rząd 1 -
48
Skrypty dla Matlaba
• Skrypt "h5reader_example.m" odczytuje dane
z pliku wejściowego w formacie HDF5 i
wyświetla zawartość w oknie roboczym.
• Nazwa pliku wejściowego znajduję się w
zmiennej FILE_NAME deklarowanej na
początku skryptu
49
Download