10. Ein kurzer Überblick über die Standardbibliothek

10.1. Betriebssystemschnittstelle

Das Modul os bietet Dutzende von Funktionen für die Interaktion mit dem Betriebssystem:

>>> import os
>>> os.getcwd()      # Return the current working directory
'C:\\Python313'
>>> os.chdir('/server/accesslogs')   # Change current working directory
>>> os.system('mkdir today')   # Run the command mkdir in the system shell
0

Verwenden Sie unbedingt den Stil import os anstelle von from os import * “. Dadurch wird verhindert, dass os.open() die integrierte Funktion open() überschreibt, die ganz anders funktioniert.

Die integrierten Funktionen dir() und help() sind nützliche interaktive Hilfsmittel für die Arbeit mit großen Modulen wie os

>>> import os
>>> dir(os)<returns a list of all module functions>>>> help(os)
<gibt eine ausführliche Handbuchseite zurück, die aus den Docstrings des Moduls erstellt wurde>

Für alltägliche Aufgaben der Datei- und Verzeichnisverwaltung bietet das Modul shutil eine übergeordnete Schnittstelle, die einfacher zu bedienen ist:

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
'archive.db'
>>> shutil.move('/build/executables', 'installdir')
'installdir'

10.2. Datei-Platzhalter

Das Modul glob bietet eine Funktion zum Erstellen von Dateilisten anhand von Verzeichnissuchen mit Platzhaltern:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

10.3. Befehlszeilenargumente

Häufig verwendete Hilfsskripte müssen oft Kommandozeilenargumente verarbeiten. Diese Argumente werden im argv-Attribut des Moduls sys als Liste gespeichert. Nehmen wir zum Beispiel die folgende Datei demo.py:

# File demo.py
import sys
print(sys.argv)

Hier ist die Ausgabe, die man erhält, wenn man python demo.py one two three über die Befehlszeile ausführt:

['demo.py', 'one', 'two', 'three']

Das Modul argparse bietet einen ausgefeilteren Mechanismus zur Verarbeitung von Befehlszeilenargumenten. Das folgende Skript extrahiert einen oder mehrere Dateinamen sowie eine beliebige Anzahl von Zeilen, die angezeigt werden sollen:

import argparse

parser = argparse.ArgumentParser(
    prog='top',
    description='Die ersten Zeilen jeder Datei anzeigen')
parser.add_argument('filenames', nargs='+')
parser.add_argument('-l', '--lines', type=int, default=10)
args = parser.parse_args()
print(args)

Wenn das Skript über die Befehlszeile mit dem Befehl python top.py --lines=5 alpha.txt beta.txt ausgeführt wird, setzt es args.lines “ auf 5 und args.filenames auf ['alpha.txt', 'beta.txt'] “.

10.4. Umleitung der Fehlerausgabe und Beendigung des Programms

Das Modul sys verfügt außerdem über Attribute für stdin, stdout und stderr. Letzteres ist nützlich, um Warnungen und Fehlermeldungen auszugeben, damit diese auch dann sichtbar sind, wenn stdout umgeleitet wurde:

>>> sys.stderr.write('Warning, log file not found starting a new one\\n')
Warning, log file not found starting a new one

Der direkteste Weg, ein Skript zu beenden, ist die Verwendung von sys.exit().

10.5. Zeichenfolgenabgleich

Das Modul re stellt Werkzeuge für reguläre Ausdrücke zur erweiterten Zeichenfolgenverarbeitung bereit. Für komplexe Abgleich- und Bearbeitungsaufgaben bieten reguläre Ausdrücke prägnante, optimierte Lösungen:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

Wenn nur einfache Funktionen benötigt werden, sind String-Methoden vorzuziehen, da sie leichter zu lesen und zu debuggen sind:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

10.6. Mathematik

Das Modul math ermöglicht den Zugriff auf die zugrunde liegenden C-Bibliotheksfunktionen für Gleitkommaarithmetik:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

Das Modul random bietet Werkzeuge zur Durchführung von Zufallsauswahlen:

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # Stichprobe ohne Zurücklegen
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # Zufällige Fließkommazahl aus dem Intervall [0.0, 1.0)
0.17970987693706186
>>> random.randrange(6)    # Zufällige Ganzzahl gewählt aus range(6)
4

Das Modul statistics berechnet grundlegende statistische Kennzahlen (Mittelwert, Median, Varianz usw.) für numerische Daten:

>>> import statistics
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095

Das SciPy-Projekt <https://scipy.org> bietet zahlreiche weitere Module für numerische Berechnungen.

10.7. Internetzugang

Es gibt eine Reihe von Modulen für den Zugriff auf das Internet und die Verarbeitung von Internetprotokollen. Zwei der einfachsten sind urllib.request zum Abrufen von Daten über URLs und smtplib zum Versenden von E-Mails:

>>> from urllib.request import urlopen
>>> with urlopen('https://docs.python.org/3/') as response:
...     for line in response:
...         line = line.decode()             # Bytes in einen str umwandeln
...         if 'updated' in line:
...             print(line.rstrip())         # Abschließenden Zeilenumbruch entfernen
...
"      Last updated on Nov 11, 2025 (20:11 UTC).

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... \"\"\"To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()

(Beachten Sie, dass für das zweite Beispiel ein auf „localhost“ laufender Mailserver erforderlich ist.)

10.8. Termine und Uhrzeiten

Das Modul datetime stellt Klassen zur Verfügung, mit denen sich Datums- und Zeitangaben sowohl auf einfache als auch auf komplexe Weise bearbeiten lassen. Zwar wird die Arithmetik mit Datums- und Zeitangaben unterstützt, der Schwerpunkt der Implementierung liegt jedoch auf der effizienten Extraktion von Elementen für die Ausgabeformatierung und -bearbeitung. Das Modul unterstützt zudem Objekte, die zeitzonenabhängig sind.

>>> # Datumsangaben lassen sich leicht erstellen und formatieren
>>> import datetime as dt
>>> now = dt.date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # Datumsangaben unterstützen Kalenderarithmetikc
>>> birthday = dt.date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

10.9. Datenkomprimierung

Gängige Formate für die Datenarchivierung und -komprimierung werden direkt von folgenden Modulen unterstützt: zlib, gzip, bz2, lzma, zipfile und tarfile.

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

10.10. Leistungsmessung

Manche Python-Anwender interessieren sich sehr dafür, wie sich die Leistung verschiedener Lösungsansätze für dasselbe Problem im Vergleich zueinander darstellt. Python bietet ein Messwerkzeug, das diese Fragen sofort beantwortet.

Beispielsweise könnte es verlockend sein, anstelle des herkömmlichen Ansatzes zum Vertauschen von Argumenten die Funktion zum Packen und Entpacken von Tupeln zu verwenden. Das Modul timeit veranschaulicht schnell einen leichten Leistungsvorteil:

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

Im Gegensatz zur feinen Granularität von timeit bieten die Module profile und pstats Werkzeuge zur Identifizierung zeitkritischer Abschnitte in größeren Code-Blöcken.

10.11. Qualitätskontrolle

Ein Ansatz zur Entwicklung hochwertiger Software besteht darin, für jede Funktion im Zuge ihrer Entwicklung Tests zu schreiben und diese Tests während des Entwicklungsprozesses regelmäßig auszuführen.

Das Modul doctest bietet ein Werkzeug zum Durchsuchen eines Moduls und zum Überprüfen von Tests, die in den Docstrings eines Programms eingebettet sind. Die Erstellung von Tests ist so einfach wie das Kopieren und Einfügen eines typischen Aufrufs zusammen mit seinen Ergebnissen in den Docstring. Dies verbessert die Dokumentation, indem es dem Benutzer ein Beispiel liefert, und ermöglicht es dem doctest-Modul, sicherzustellen, dass der Code der Dokumentation entspricht:

def average(values):
    """Berechnet das arithmetische Mittel einer Liste von Zahlen.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # eingebettete Tests automatisch validieren

Das Modul unittest ist nicht ganz so einfach zu handhaben wie das Modul doctest “, ermöglicht jedoch die Pflege einer umfassenderen Reihe von Tests in einer separaten Datei:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        with self.assertRaises(ZeroDivisionError):
            average([])
        with self.assertRaises(TypeError):
            average(20, 30, 70)

unittest.main()  # Der Aufruf über die Befehlszeile führt alle Tests aus

10.12. Batterien im Lieferumfang enthalten

Python verfolgt die Philosophie „Batteries included“. Dies zeigt sich am deutlichsten an den ausgefeilten und robusten Funktionen seiner größeren Pakete. Zum Beispiel:

  • Die Module xmlrpc.client und xmlrpc.server machen die Implementierung von Remote Procedure Calls zu einer fast trivialen Aufgabe. Trotz der Namen der Module sind keine direkten Kenntnisse oder der Umgang mit XML erforderlich.

  • Das Paket email ist eine Bibliothek zur Verwaltung von E-Mail-Nachrichten, einschließlich MIME- und anderer auf dem RFC 5322 basierender Nachrichtendokumente. Im Gegensatz zu smtplib und poplib , die tatsächlich Nachrichten senden und empfangen, verfügt das E-Mail-Paket über ein umfassendes Toolset zum Erstellen oder Dekodieren komplexer Nachrichtenstrukturen (einschließlich Anhängen) sowie zur Implementierung von Internet-Kodierungs- und Header-Protokollen.

  • Das Paket json bietet umfassende Unterstützung für die Analyse dieses gängigen Datenaustauschformats. Das Modul csv unterstützt das direkte Lesen und Schreiben von Dateien im CSV-Format (Comma-Separated Value), das von Datenbanken und Tabellenkalkulationsprogrammen allgemein unterstützt wird. Die XML-Verarbeitung wird durch die Pakete xml.etree.ElementTree , xml.dom und xml.sax unterstützt. Zusammen vereinfachen diese Module und Pakete den Datenaustausch zwischen Python-Anwendungen und anderen Tools erheblich.

  • Das Modul sqlite3 ist eine Hülle für die SQLite-Datenbankbibliothek und stellt eine persistente Datenbank bereit, die mithilfe einer leicht vom Standard abweichenden SQL-Syntax aktualisiert und abgefragt werden kann.

  • Die Internationalisierung wird durch eine Reihe von Modulen unterstützt, darunter gettext , locale und das Paket codecs .