3 Die Standardbibliothek

3.1 Einführung in die Python-Standardbibliothek

Die Python-Standardbibliothek ist eine umfangreiche Sammlung von Modulen und Paketen, die direkt mit Python ausgeliefert werden. Diese Bibliothek enthält eine Vielzahl von nützlichen Funktionen und Klassen, die es Entwicklern ermöglichen, eine breite Palette von Aufgaben ohne zusätzliche Abhängigkeiten zu erledigen.

Die Python-Standardbibliothek wird auch als “Batterien inklusive” bezeichnet, da sie viele gängige Anwendungsfälle abdeckt und die Notwendigkeit, externe Bibliotheken zu installieren, reduziert. Die Standardbibliothek ist in Python integriert, sodass Sie die enthaltenen Module und Pakete direkt importieren und verwenden können, ohne sie gesondert installieren zu müssen.

Einige der Vorteile der Python-Standardbibliothek sind:

3.2 Datei- und Verzeichnisverwaltung

import os
import shutil
from pathlib import Path

# File and directory operations using os module
os.mkdir("mydir")
os.chdir("mydir")
with open("myfile.txt", "w") as f:
    f.write("Hello, World!")
os.rename("myfile.txt", "newfile.txt")
os.remove("newfile.txt")
os.chdir("..")
os.rmdir("mydir")

# File and directory operations using shutil module
shutil.copy("file.txt", "file_copy.txt")
shutil.move("file_copy.txt", "newdir/")
shutil.rmtree("newdir")

# Object-oriented path operations using pathlib module
p = Path(".")
for file in p.glob("*.txt"):
    print(file.name)

In diesem Beispiel haben wir das os-Modul, das shutil-Modul und das pathlib-Modul gezeigt, die nützlich sind, um Datei- und Verzeichnisoperationen durchzuführen.

Wir haben mit dem os-Modul Verzeichnisse erstellt, Dateien erstellt, umbenannt und gelöscht, sowie das Arbeitsverzeichnis geändert und Verzeichnisse entfernt.

Mit dem shutil-Modul können wir Dateien und Verzeichnisse kopieren, verschieben und löschen. In diesem Beispiel haben wir eine Datei kopiert, sie in ein anderes Verzeichnis verschoben und schließlich das Verzeichnis vollständig entfernt.

Das pathlib-Modul ist eine objektorientierte Alternative zu den Funktionen des os-Moduls. Wir haben eine Path-Instanz erstellt, die das aktuelle Verzeichnis darstellt, und haben dann die glob()-Methode verwendet, um alle .txt-Dateien im Verzeichnis zu finden und ihre Namen auszugeben. Das pathlib-Modul ist nützlich, um sicherzustellen, dass Pfade und Dateinamen in plattformunabhängiger Weise angegeben werden, und um komplexe Pfade und Dateinamen zu manipulieren.

3.3 Datums- und Zeitfunktionen

import datetime
import time
import calendar

# Datetime module
now = datetime.datetime.now()
print(now)
print(now.strftime("%Y-%m-%d %H:%M:%S"))
delta = datetime.timedelta(days=1)
tomorrow = now + delta
print(tomorrow)

# Time module
start = time.time()
time.sleep(2)
end = time.time()
print(f"Elapsed time: {end - start:.2f} seconds")

# Calendar module
c = calendar.monthcalendar(2022, 3)
print(calendar.month_name[3])
print("Mo Tu We Th Fr Sa Su")
for week in c:
    row = ""
    for day in week:
        if day == 0:
            row += "   "
        else:
            row += f" {day:02d}"
    print(row)

In diesem Beispiel haben wir das datetime-Modul, das time-Modul und das calendar-Modul gezeigt, die nützlich sind, um mit Datum, Zeit und Kalenderoperationen umzugehen.

Mit dem datetime-Modul können wir aktuelle Datum und Uhrzeit abrufen, Datums- und Zeitdauern berechnen und Datums- und Zeitangaben formatieren. Wir haben auch gezeigt, wie wir Datums- und Zeitangaben manipulieren können, indem wir eine timedelta-Instanz erstellt haben und sie zu einem datetime-Objekt hinzugefügt haben.

Mit dem time-Modul können wir Zeitmessungen durchführen und Zeitangaben formatieren. In diesem Beispiel haben wir die time()-Funktion verwendet, um den Startzeitpunkt eines Programms zu messen, die sleep()-Funktion verwendet, um eine Pause von 2 Sekunden einzulegen, und die time()-Funktion erneut verwendet, um die Endzeit zu messen und die verstrichene Zeit zu berechnen.

Mit dem calendar-Modul können wir verschiedene Kalenderoperationen und -funktionen durchführen. In diesem Beispiel haben wir den Kalender für den März 2022 generiert und ausgegeben.

3.4 Mathematische und numerische Operationen

import math
import random
import statistics
import fractions
import decimal

# Math module
print(math.sqrt(25))
print(math.pi)
print(math.sin(math.pi / 2))

# Random module
print(random.randint(1, 10))
print(random.choice(['apple', 'banana', 'cherry']))
random.shuffle([1, 2, 3, 4, 5])
print(random.random())

# Statistics module
data = [1, 2, 3, 4, 5]
print(statistics.mean(data))
print(statistics.median(data))
print(statistics.stdev(data))

# Fractions module
x = fractions.Fraction(1, 3)
y = fractions.Fraction(2, 3)
print(x + y)
print(x * y)

# Decimal module
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
print(a + b)

In diesem Beispiel haben wir das math-Modul, das random-Modul, das statistics-Modul, das fractions-Modul und das decimal-Modul gezeigt.

Mit dem math-Modul können wir grundlegende mathematische Funktionen wie Quadratwurzeln, Trigonometrische Funktionen und Konstanten wie Pi und e berechnen.

Mit dem random-Modul können wir Zufallszahlen generieren und zufällige Elemente aus einer Sequenz auswählen oder eine Sequenz zufällig durcheinander bringen.

Mit dem statistics-Modul können wir statistische Funktionen und Berechnungen durchführen, wie zum Beispiel das Berechnen des Durchschnitts, des Medians und der Standardabweichung einer Liste von Zahlen.

Mit dem fractions-Modul können wir Bruchrechnungen durchführen, wie zum Beispiel das Addieren und Multiplizieren von Brüchen.

Mit dem decimal-Modul können wir dezimale Arithmetik mit fester Genauigkeit durchführen, was nützlich ist, wenn wir mit Geldbeträgen oder anderen Werten arbeiten, bei denen die Genauigkeit wichtig ist.

3.5 Datenkomprimierung und -archivierung

import zipfile
import tarfile
import gzip
import bz2

# Zipfile module
with zipfile.ZipFile("archive.zip", "w") as myzip:
    myzip.write("file.txt")
with zipfile.ZipFile("archive.zip", "r") as myzip:
    myzip.extractall()

# Tarfile module
with tarfile.open("archive.tar", "w") as mytar:
    mytar.add("file.txt")
with tarfile.open("archive.tar", "r") as mytar:
    mytar.extractall()

# Gzip module
with open("file.txt", "rb") as f_in:
    with gzip.open("file.txt.gz", "wb") as f_out:
        f_out.write(f_in.read())
with gzip.open("file.txt.gz", "rb") as f_in:
    with open("file.txt", "wb") as f_out:
        f_out.write(f_in.read())

# Bz2 module
with open("file.txt", "rb") as f_in:
    with bz2.open("file.txt.bz2", "wb") as f_out:
        f_out.write(f_in.read())
with bz2.open("file.txt.bz2", "rb") as f_in:
    with open("file.txt", "wb") as f_out:
        f_out.write(f_in.read())

In diesem Beispiel haben wir das zipfile-Modul, das tarfile-Modul, das gzip-Modul und das bz2-Modul gezeigt, die nützlich sind, um Datenkomprimierung und -archivierung durchzuführen.

Mit dem zipfile-Modul können wir ZIP-Archive erstellen und extrahieren. Wir haben gezeigt, wie man eine Datei file.txt in ein ZIP-Archiv packt und dann das Archiv extrahiert.

Mit dem tarfile-Modul können wir TAR-Archive erstellen und extrahieren. Wir haben gezeigt, wie man eine Datei file.txt in ein TAR-Archiv packt und dann das Archiv extrahiert.

Mit dem gzip-Modul können wir GZIP-Komprimierung und -Dekomprimierung durchführen. Wir haben gezeigt, wie man eine Datei file.txt in eine GZIP-komprimierte Datei file.txt.gz umwandelt und dann die GZIP-komprimierte Datei in die ursprüngliche Datei zurückwandelt.

Mit dem bz2-Modul können wir BZIP2-Komprimierung und -Dekomprimierung durchführen. Wir haben gezeigt, wie man eine Datei file.txt in eine BZIP2-komprimierte Datei file.txt.bz2 umwandelt und dann die BZIP2-komprimierte Datei in die ursprüngliche Datei zurückwandelt.

3.6 Netzwerk- und Internetprotokolle

import socket
import smtplib
from email.mime.text import MIMEText
from urllib import request

# Socket module
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.google.com", 80))
s.sendall(b"GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")
response = s.recv(4096)
print(response.decode())

# Smtplib module
message = MIMEText("Hello, this is a test email.")
message["Subject"] = "Test Email"
message["From"] = "me@example.com"
message["To"] = "you@example.com"
with smtplib.SMTP("smtp.example.com") as server:
    server.login("me@example.com", "password")
    server.sendmail("me@example.com", "you@example.com", message.as_string())

# Email module
import email.message
msg = email.message.Message()
msg.set_payload("This is a test email.")
msg["From"] = "me@example.com"
msg["To"] = "you@example.com"
msg["Subject"] = "Test Email"
print(msg.as_string())

# Urllib module
response = request.urlopen("https://www.google.com")
print(response.status)
print(response.getheader("Content-Type"))
print(response.read().decode())

In diesem Beispiel haben wir das socket-Modul, das smtplib-Modul, das email-Modul und das urllib-Modul gezeigt, die nützlich sind, um mit Netzwerk- und Internetprotokollen zu arbeiten.

Mit dem socket-Modul können wir Netzwerkkommunikation durchführen. Wir haben gezeigt, wie man eine Verbindung zu einem HTTP-Server herstellt und eine HTTP-Anfrage sendet.

Mit dem smtplib-Modul können wir E-Mails über SMTP (Simple Mail Transfer Protocol) senden. Wir haben gezeigt, wie man eine E-Mail-Nachricht erstellt und über einen SMTP-Server sendet.

Mit dem email-Modul können wir E-Mail-Nachrichten erstellen und parsen. Wir haben gezeigt, wie man eine einfache E-Mail-Nachricht erstellt und sie als Text darstellt.

Mit dem urllib-Modul können wir URLs verarbeiten und HTTP-Anfragen senden. Wir haben gezeigt, wie man eine HTTP-Anfrage an Google sendet und die Antwort ausgibt.

3.7 Datenformate und Datenaustausch

import json
import csv
import xml.etree.ElementTree as ET

# Json module
data = {"name": "John", "age": 30, "city": "New York"}
json_string = json.dumps(data)
print(json_string)
data = json.loads(json_string)
print(data)

# Csv module
with open("data.csv", "w", newline="") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Name", "Age", "City"])
    writer.writerow(["John", "30", "New York"])
    writer.writerow(["Alice", "25", "Los Angeles"])
with open("data.csv", newline="") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(", ".join(row))

# ElementTree module
xml_string = '<root><person><name>John</name><age>30</age></person></root>'
root = ET.fromstring(xml_string)
print(root.tag)
for person in root.findall("person"):
    name = person.find("name").text
    age = person.find("age").text
    print(name, age)

In diesem Beispiel haben wir das json-Modul, das csv-Modul und das xml.etree.ElementTree-Modul gezeigt, die nützlich sind, um mit Datenformaten und Datenaustausch zu arbeiten.

Mit dem json-Modul können wir JSON (JavaScript Object Notation)-Daten serialisieren und deserialisieren. Wir haben gezeigt, wie man ein Python-Datenobjekt in eine JSON-Zeichenkette serialisiert und wie man eine JSON-Zeichenkette in ein Python-Datenobjekt deserialisiert.

Mit dem csv-Modul können wir CSV-Dateien lesen und schreiben. Wir haben gezeigt, wie man eine CSV-Datei schreibt und wie man eine CSV-Datei liest und ihre Inhalte ausgibt.

Mit dem xml.etree.ElementTree-Modul können wir XML-Daten verarbeiten. Wir haben gezeigt, wie man eine XML-Zeichenkette in einen ElementTree umwandelt und wie man Elemente in dem ElementTree findet und ihre Inhalte ausgibt.

3.8 Multithreading und Multiprozessing

import threading
import multiprocessing

# Threading module
def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for letter in "abcdefghij":
        print(letter)

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)
t1.start()
t2.start()
t1.join()
t2.join()

# Multiprocessing module
def square(x):
    return x * x

if __name__ == '__main__':
    with multiprocessing.Pool(processes=4) as pool:
        result = pool.map(square, range(10))
        print(result)

Dieses Beispiel zeigt, wie man das threading-Modul und das multiprocessing-Modul verwendet, um Multithreading und Multiprozessing in Python zu implementieren.

Mit dem threading-Modul können wir mehrere Threads in einem Programm ausführen. Wir haben gezeigt, wie man Threads erstellt und startet, und wie man auf das Ende eines Threads wartet.

Mit dem multiprocessing-Modul können wir Aufgaben in Parallelverarbeitung ausführen. Wir haben gezeigt, wie man eine Funktion auf eine Sequenz von Eingaben anwendet und das Ergebnis in einer Liste von Ausgaben zurückgibt. Beachten Sie, dass die Verwendung von multiprocessing innerhalb einer if __name__ == '__main__':-Bedingung steht, um Probleme beim Starten von Unterprozessen zu vermeiden.