Python-Programmierung: Tricks und Tipps
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Sortieren nach beliebigen Objekt-Attributen
Wenn man ein Array von Objekten nach einem beliebigen Attribut dieser Objekte sortieren will, kann man folgendermaßen vorgehen:
def sort(objects,sortAttrib): nlist = map(lambda object, sortAttrib=sortAttrib: (getattr(object, sortAttrib),object), objects) nlist.sort(reverse=True) return map(lambda (key, object): object, nlist) class my: def __init__(self, id, title): self.id = id self.title = title m1 = my(1, 'Number one') m2 = my(2, 'Number two') m3 = my(3, 'Number three') for object in sort([m1, m3, m2], 'id'): print object.title
[Bearbeiten] help()
help() ist ein Built-In-Befehl und bietet eine interaktive Hilfe. Mit help(objekt) kann man sich auch direkt Hilfeseiten zum jeweiligen Objekt ausgeben lassen.
[Bearbeiten] Doppelte Einträge in einer Liste löschen
Eine recht schnelle Variante, ist der Umweg über ein Dictionary:
liste=[1,1,1,1,2,2,2,2,3,4,5,6,7,7,7,7] dic={} for i in liste: dic[i]='' liste=dic.keys() liste.sort() print liste
Ergebnis:
[1, 2, 3, 4, 5, 6, 7]
Alternative:
liste=[1,1,1,1,2,2,2,2,3,4,5,6,7,7,7,7] liste = list(set(liste))
[Bearbeiten] Umrechnung von Zeit
Mittels divmod() kann man komplizierte Umrechnungen recht einfach lösen:
def Sek_nach_HMS(sek): h,s = divmod(sek,3600) m,s = divmod(s,60) return "%02.fh %02.fm %02.fs" % (h, m, s) print Sek_nach_HMS(130823)
Ergebnis:
36h 20m 23s
[Bearbeiten] Darstellung von Zahlen (Tausenderpunkt)
Um Zahlen im lokal eingestellten Format anzuzeigen (der Tausenderpunkt, Nachkommastellen mit einem Komma getrennt) kann man es sich ganz einfach machen:
import locale locale.setlocale(locale.LC_ALL, "") print locale.format("%s", 1000000.54, True)
Ergebnis:
1.000.000,54
[Bearbeiten] In einer for-Schleife über zwei Werte iterieren
Mit for kann man auch zwei Werte gleichzeitig iterieren, was manchmal sehr praktisch sein kann. Es gibt sicherlich auch andere Wege wie man dies bewerkstelligen kann, aber diese Lösung scheint sehr gut zu sein.
buchstaben = ['abc', 'def', 'ghi'] nummern = [1, 2, 3] for b, n in zip(buchstaben, nummern): print "B: ", b print "N: ", n
[Bearbeiten] Perls chomp() in Python
Manchmal bekommt man Strings, die einen Zeilenumbruchscharakter haben, d.h. an denen hinten ein \n dranhängt. Das ist sehr ärgerlich bei der Ausgabe mit print; also kann man sich mit den Funktionen rstrip() und splitlines() helfen. Aus Perl kennt man die chomp()-Funktion. So etwas existiert auch unter Python.
st = """The Python programming language """ st = st.rstrip('\n')
Um direkt eine Datei ohne die abschließenden "\n"-Zeichen in ein Array zu lesen, kann man also zum Beispiel einfach folgendes machen:
f = open('foo.txt','r') foo = [line.rstrip('\n') for line in f.readlines()]
[Bearbeiten] Datenbank
[Bearbeiten] MySQL
Zur Verbindung mit einer MySQL Datenbank verwendet man am besten das Modul MySQLdb:
import MySQLdb db_verbindung = MySQLdb.connect ( host = "localhost", user = "benutzername", passwd = "passwort", db = "beispiel_datenbank" ) cursor = db_verbindung.cursor() mein_name = "Michael Ströck" cursor.execute("SELECT name, geburtstag FROM geburtstage WHERE name = '%s'", mein_name) einzelnes_resultat = cursor.fetchone() # Ein einzelnes Resultat, als Tupel. alle_resultate = cursor.fetchall() # Array mit allen Resultaten, jedes Resultat als Tupel. cursor.close() db_verbindung.close()
[Bearbeiten] .mdi - Access
[Bearbeiten] Grundlagen
Einen Zugriff auf Access-Datenbanken ist nur mit zusätzlich Modulen möglich. Ermöglich wird es u.a. mit den Python for Windows Extensions von Mark Hammond. Genutzt werden dabei die Windows ODBC Datenbanktreiber.
Zuerst muß man im "ODBC-Datenquellen-Administrator" (zu finden unter Systemsteuerung / Verwaltung) die *.mdb Datei als Datenquelle eintragen und benennen.
Über die ODBC-Schnittstelle können alle gängigen Datenbanken angesprochen werden. Sofern nicht vorhanden (wie z.B. für MySQL), muss erst noch ein passender ODBC-Treiber für die Datenbank aus dem Internet besorgt und installiert werden.
[Bearbeiten] Code-Beispiel
import dbi, odbc def dump(TabellenName): cursor = db.cursor() cursor.execute('SELECT * FROM %s' % (TabellenName)) data = cursor.fetchall() for index, datum in enumerate(data): print index, datum cursor.close() db = odbc.odbc('DatenBankName') dump("Index") db.close()