Sonntag, 12. Februar 2012

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

Daten mit Python komprimieren

Python eignet sich für viele Anwendungsbereiche: es ist plattform-neutral, leicht zu erlernen und verfügt über eine gut lesbare Syntax (im Unterschied zu Perl/PHP). Zudem ist die Standardbibliothek reich an Modulen: Zum Beispiel ist das Modul zipfile sehr nützlich. Das folgende Beispiel zeigt, wie schnell man damit ein zip-Archiv erstellt:

#!/usr/bin/env python

import os, sys, glob, zipfile

def create(name, patt):
    try:
        archiv = zipfile.ZipFile(name, "w")
        for f in glob.glob(patt):
            archiv.write(f, os.path.basename(f), zipfile.ZIP_DEFLATED)
        archiv.close()
    except:
        print '\n', sys.exc_type, ' ', sys.exc_value, '\n'

if __name__ == '__main__':
    
    archiv = sys.argv[1] 
    create(archiv, '*.c')
Im Beispiel wird auch das Modul glob verwendet; dasselbe sorgt dafür, dass die Arbeit mit File-Pattern vereinfacht wird (pydoc glob liefert weiterführende Informationen). Deshalb reicht es aus, die letzte Anweisung des Programms (create(archiv, '*.c')) mit einem Platzhalter (*.c) aufzurufen. Im Beispiel muss auf der Konsole der Name für das zu erstellende Archiv angegeben werden, danach werden alle Dateien mit den Endung *.c in das Archiv gepackt:
ich@meinrechner:~> python zipmod1.py sourcen.zip
Sind Sie vielmehr an den Inhalten - im folgenden Beispiel die ersten fünfhundert Zeichen - der gepackten Dateien interessiert sind, hilft das nächste Skript weiter:
#!/usr/bin/env python

import sys, zipfile

def showData(archiv):
    try:
        res = []
        f   = zipfile.ZipFile(archiv, "r")
        for n in f.namelist():
            data = f.read(n)
            info = "[FILE: %s, LENGTH: %d]\n\n %s" % (n, len(data), repr(data[:500]))
            res.append(info)
        return res 
    except:
        print '\n', sys.exc_type, ' ', sys.exc_value, '\n'

if __name__ == '__main__':
    
    archiv = sys.argv[1] 
    RES= showData(archiv)
    print
    for x in RES:
        print x, '\n'
    print
Auch hier wird der Archivname angegeben:
ich@meinrechner:~> python zipmod2.py meine_sourcen.zip
So effektiv ist Python: mit ein paar Zeilen Code baut man sich im Handumdrehen praktische Tools.

Thomas Kaufmann







Software & Support Verlag GmbH