Python-Programmierung: Tricks und Tipps

Aus Wikibooks

Wechseln zu: Navigation, Suche

<< Inhaltsverzeichnis

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()

<< Inhaltsverzeichnis

Persönliche Werkzeuge