Vorlesung Skriptsprachen Duale Hochschule Stuttgart Sommersemester 2016 Dipl.-Ing. (FH) Volker Schepper Globale Module • Globale Module aus Standardbibliotheken oder selbstgeschriebene werden mit dem Anweisung import eingebunden. import math • Mehre Module können in einer Zeile getrennt mit Kommas eingebunden werden. import math, random import math import random alternative Schreibweise Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Lokale Module Lokale Module werden gleich wie globale Module mit der Anweisung „import“ eingebunden. Das lokale Module muss in dem gleichen Verzeichnis gespeichert sein, wie das Hauptprogramm. Der Dateinamen für das Modul muss mit „.py“ enden. Weitere Punkte dürfen nicht im Dateinamen stehen. Konflikte mit gleichnamigen globalen und lokalen Modulen werden wir folgt aufgelöst: 1) Lokales Modul 2) Globales Modul 3) Wird kein lokales oder globales Modul gefunden, wird ein „ImportError“ erzeugt. Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Lokale Module main.py mathemodul.py import mathemodul import math print("Start Skript") print(mathemodul.pi()) print(mathemodul.kehrwert(mathemodul.pi()) ) Start mathemodul - Initialisierung Start Skript 3.14 0.3184713375796178 print("Start mathemodul - \ Initialisierung") def pi(): return 3.14 def kehrwert(var): return 1/var Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Mathematik mit Python Methode Wirkung exp(x) entspricht e**x log(x[, base]) Logarithmus zur Basis base log10(x) Logarithmus zur Basis 10 pow(x, y) entspricht x**y sqrt(x) Wurzel von x sin(x) Sinus von x cos(x) Cosinus von x tan(x) Tangens von x Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Mathematik mit Python import math i = math.exp(1) print(i) 2.718281828459045 i = math.sqrt(64) print(i) 8.0 i = math.sin(math.pi/2) print(i) 1.0 Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Daten Sollen Daten dauerhaft gespeichert werden, müssen dies durch eine Datei auf einem dauerhaften Datenträger erfolgen. Die Zuordnung/Auffindbarkeit der Daten können unterschiedliche Verfahren verwendet werden. • Betriebssystem Zuordnungstabellen • Datenbanken • Cloud (Netzwerk) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien • Mit der Funktion open(...) wird eine Datei geöffnet. • Der Rückgabewert ist ein Fileobjekt. • 1. Parameter: Pfad und Dateiname • 2. Parameter: Öffnungsmodi fileobj = open(Pfad und Dateiname, Öffnungsmodi) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien - Modi Mode Erklärung r Datei kann ausschließlich gelesenen werden. w Datei wird neu erstellt, oder vorhandene vollständig gelöscht. (Überschrieben) a Datei wird zum Schreiben geöffnet. Neuer Inhalt wird am Ende einer vorhandenen Datei angehängt. r+ Datei wird zum Lesen und Schreiben geöffnet. Erste Position ist das erste Zeichen der Datei. w+ Datei wird zum Lesen und Schrieben geöffnet. Datei wird neu erstellt, oder vorhandene vollständig gelöscht. a+ Datei wird zum Lesen und Schreiben geöffnet. Initial Position am Ende der Datei. Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien • Wird eine Datei geöffnet, können Laufzeitfehler auftreten. • Schreibmodus: Keine Zugriffsberechtigung zum schreiben der Datei. (Z.B. eine anderes Programm hat bereits die Datei geöffnet) • Lesemodus: Die Datei existiert nicht • ==> Daher sollte bei dem öffnen einer Datei immer eine Ausnahmebehandlung durchgeführt werden. Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien • Dateien beinhalten Daten in Form von Strings. Sollen Zahlen gespeichert oder gelesen werden, müssen diese Umgewandelt werden. • Umwandlung: str(); int(); … Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien - read • Vollständigen Inhalt einer Datei auslesen s_string = file.read(x) • Zeilenweise auslesen einer Datei s_string = file.readline() • Vollständigen Inhalt einer Datei auslesen und in einer Liste überführen s_string = file.readlines() Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien - Beispiel daten = input("Daten: ") pfad = input("Pfad: ") try: f = open(pfad, "w") f.write(daten) f.close() print("Daten sind gespeichert") except: print("Fehler bei speichern") Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien im Verzeichnis • Das Modul glob biete die Funktion glob() an. Die Funktion gibt eine Liste von Dateien im Arbeitsverzeichnis zurück. • Mit dem Funktionsparameter kann nach bestimmten Dateien gesucht werden. • "*.*" Alle Dateien (ohne Filterung) import glob dateiliste = glob.glob("*.*") print(dateiliste) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Dateien - Informationen Das „OS“ Modul gehört zur Python Standard Library. Es verwaltet viele betriebssystemnahe Aufrufe. import os v_info = os.stat("LICENSE.txt") # Größe in Bytes print(v_info[6]) # Unixzeit des letzten Zugriffs print(v_info[7]) # Unixzeit der letzten Modifikation print(v_info[8]) 32826 1330875864 1310353716 Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Komplexe File-Operationen Mit dem Modul „shutil“ können komplexe File-Operationen durchgeführt werden. • Datei kopieren shutil.copyfile(Quelle, Ziel) • Datei verschieben shutil.move(Quelle, Ziel) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Zugriff auf das Dateisystem • Ermitteln des aktuellen Arbeitsverzeichnisses os.getcwd() C:\Portable\Portable Python 3.2.1.1\App • Arbeitsverzeichnis wechseln os.chdir("/Portable") print(os.getcwd()) C:\Portable Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Zugriff auf das Dateisystem • Liste aller Dateien und Unterordner s_path = os.listdir("C:\Portable\Portable Python 3.2.1.1") print(s_path) ['App', 'PyScripter-Portable.exe', 'Python-Portable.exe'] Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Kommandozeilen-Argument • Bereits bei starten eines Skriptes können Parameter übergeben werden. import sys if len(sys.argv) == 3: for i in range(1,4): print("Das " + str(i) + ". Kommandozeilen-Argument: " + sys.argv[i]) else: print("Es wurde Kommandozeilen-Argument übergeben") print("Skript-Name: " + sys.argv[0]) Es wurde Kommandozeilen-Argument übergeben Skript-Name: module4 Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper SYS Modul • Plattform des Betriebssystems print(sys.platform) • Python Interpreter Version (Rückgabe String) print(sys.platform) 3.2.1 (default, Jul 10 2011, 21:51:15) [MSC v.1500 32 bit (Intel)] • Python Interpreter Version (Rückgabe Tupel) print(sys.version_info) (major=3, minor=2, micro=1, releaselevel='final', serial=0) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper SYS Modul • Version des Betriebssystems (Rückgabe Tupel) print(sys.getwindowsversion()) (major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') • Skript beenden sys.exit() Optional kann der exit-Funktion ein Parameter übergeben werden. Der Exit-Code 0 bedeutet erfolgreiches ausführen des Skriptes. Fehlerhafte Ausführung werden mit ungleich 0 codiert. Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datenbank Soll ein Programm große Datenmenge verwalten oder mit komplexen Daten arbeiten, ist es ratsam eine Datenbank zu verwenden. Durch eine Datenbank wird der aufwand für die Datenbereitstellung stark reduziert. Das Programm greift auf eine einheitliche Abstraktionsschicht zu. Die dahinterliegende Datenbank verwaltet die Daten auf dem Datenspeicher (Festplatte). Die Datenbank nimmt Abfragen entgegen und gibt Datensätze wieder zurück. Abstraktionsschicht Anwendung speichern abfragen Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper db Datenbank Python bietet die möglich die Möglichkeit SQL Datenbanken sehr einfach einzubinden. Über Module können mySQL oder PostgreSQL Datenbanken verwendet erden. Zusätzlich biete Python ein Modul für SQLite Datenbank an. Die SQL Datenbank kann sehr schnell eingebunden werden und benötigt wenig Ressourcen. • mySQL • PostgreSQL • SQLite Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datentypen von SQLite Datentypen • TEXT – Zeichenketten • INTEGER – Ganze Zahlen • REAL – Gleitkommazahl • NUMERIC – Decimal, Boolean … • BLOB – Große binäre Datenmenge (binary large objects) Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datentypen von SQLite INTEGER TEXT REAL INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB REAL DOUBLE DOUBLE PRECISION FLOAT BLOB BLOB Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper NUMERIC NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME Datenbank anlegen Das Modul der SQLite Datenbank wird eingebunden. import sqlite3 Mit der connect-Funktion wird die Verbindung zu der Datenbank aufgebaut. Sowohl Pfad, Dateiname und Dateiendung sind frei wählbar. Existiert die die Datei nicht, so wird eine neue Datenbank erzeugt. Existiert Datenbank bereits, wird diese geöffnet. verbindung = sqlite3.connect("/db/Datenbank.db") Sollen Daten lediglich während des Programmablauf zwischengespeichert werden und nicht dauerhaft speichern. Kann eine Datenbank im Arbeitsspeicher erzeugt werden. verbindung = sqlite3.connect(":memory:") Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datenbank anlegen - Beispiel import sqlite3 verbindung = sqlite3.connect("/tmp/test3.db") c = verbindung.cursor() sql = "CREATE TABLE personen(id INT, name TEXT, vorname TEXT, geburtstag TEXT)" c.execute(sql) c.close() Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datensätze anlegen - Beispiel import sqlite3 verbindung = sqlite3.connect("/tmp/test3.db") c = verbindung.cursor() Blockkommentar sql = """INSERT INTO personen VALUES("maier", "oliver", "27.09.1970")""" c.execute(sql) verbindung.commit() sql = "INSERT INTO personen VALUES('kramer', 'helmut', '29.06.1984')" c.execute(sql) verbindung.commit() c.close() Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datensätze abfragen - Beispiel import sqlite3 verbindung = sqlite3.connect("/tmp/test3.db") c = verbindung.cursor() sql = "SELECT * FROM personen" c.execute(sql) for zeile in c: print(zeile) c.close() ('maier', 'oliver ', '27.09.1970') ('kramer', 'helmut', '29.06.1984') Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datensätze abfragen - Beispiel import sqlite3 verbindung = sqlite3.connect("/tmp/test3.db") c = verbindung.cursor() sql = "SELECT * FROM personen WHERE name = 'maier'" c.execute(sql) for zeile in c: print(zeile[1]) bernd c.close() Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datensatz verändern - Beispiel import sqlite3 verbindung = sqlite3.connect("/tmp/test3.db") c = verbindung.cursor() sql = "UPDATE personen SET name = 'gross' WHERE vorname = 'bernd'" c.execute(sql) for zeile in c: print(zeile) c.close() Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper MySQL Datenbank • Wird festgestellt, dass eine performantere Datenbank benötigt wird, kann die SQLite Datenbank einfach durch z.B. eine mySQL Datenbank ersetzt werden. import MySQLdb connection = MySQLdb.connect("192.168.0.128", "username", "passwort", "test_db") Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Uhrzeit - Unixzeit import time var_time = time.asctime() print(var_time) print(type(var_time)) var_time = time.time() print(var_time) print(type(var_time)) Wed Apr 1 14:06:53 2015 <class 'str'> 1427854013.667 <class 'float'> Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Uhrzeit import datetime t = datetime.datetime.now() print(t) print('hour :', t.hour) print('minute:', t.minute) print('second:', t.second) print('microsecond:', t.microsecond) 2015-04-01 14:16:39.641000 hour : 14 minute: 16 second: 39 microsecond: 641000 Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper Datum import datetime today = datetime.date.today() print(today) print('ctime:', today.ctime()) print('Tupel', today.timetuple()) print('ordinal:', today.toordinal()) print('Year:', today.year) print('Mon :', today.month) print('Day :', today.day) 2015-04-01 ctime: Wed Apr 1 00:00:00 2015 (tm_year=2015, tm_mon=4, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=91, tm_isdst=-1) ordinal: 735689 Year: 2015 Mon : 4 Day : 1 Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2016 – Dipl.-Ing.(FH) Volker Schepper