Python3-Standardbibliothek – Überblick
Die Python-Standardbibliothek ist sehr umfangreich und deckt ein breites Spektrum an Komponenten ab. Mit der Standardbibliothek können wir verschiedene Aufgaben einfach erledigen.
Im Folgenden sind einige Module der Python3-Standardbibliothek aufgeführt:
os-Modul: Das os-Modul bietet viele Funktionen für die Interaktion mit dem Betriebssystem, wie z. B. das Erstellen, Verschieben und Löschen von Dateien und Verzeichnissen sowie den Zugriff auf Umgebungsvariablen.
sys-Modul: Das sys-Modul bietet Funktionen im Zusammenhang mit dem Python-Interpreter und dem System, wie die Version und den Pfad des Interpreters sowie Informationen über stdin, stdout und stderr.
time-Modul: Das time-Modul bietet Funktionen für den Umgang mit Zeit, wie das Abrufen der aktuellen Zeit, das Formatieren von Datum und Uhrzeit, Zeitmessung usw.
datetime-Modul: Das datetime-Modul bietet weiterführende Funktionen zur Verarbeitung von Datum und Uhrzeit, wie z. B. die Behandlung von Zeitzonen, die Berechnung von Zeitdifferenzen, die Berechnung von Datumsdifferenzen usw.
random-Modul: Das random-Modul bietet Funktionen zum Generieren von Zufallszahlen, wie das Generieren zufälliger Ganzzahlen, Gleitkommazahlen, Sequenzen usw.
math-Modul: Das math-Modul bietet mathematische Funktionen, wie trigonometrische Funktionen, logarithmische Funktionen, Exponentialfunktionen, Konstanten usw.
re-Modul: Das re-Modul bietet Funktionen zur Verarbeitung regulärer Ausdrücke, die für Textsuche, Ersetzung, Aufteilung usw. verwendet werden können.
json-Modul: Das json-Modul bietet Funktionen zur JSON-Codierung und -Decodierung, mit denen Python-Objekte in das JSON-Format umgewandelt und Python-Objekte aus dem JSON-Format geparst werden können.
urllib-Modul: Das urllib-Modul bietet Funktionen für den Zugriff auf Webseiten und die Verarbeitung von URLs, einschließlich Herunterladen von Dateien, Senden von POST-Anfragen, Verarbeiten von Cookies usw.
Betriebssystem-Schnittstelle
Das os-Modul bietet viele Funktionen im Zusammenhang mit dem Betriebssystem, wie Datei- und Verzeichnisoperationen.
Beispiel
# Aktuelles Arbeitsverzeichnis ermitteln
current_dir = os.getcwd()
print("Aktuelles Arbeitsverzeichnis:", current_dir)
# Dateien im Verzeichnis auflisten
files = os.listdir(current_dir)
print("Dateien im Verzeichnis:", files)
Es wird empfohlen, denimport os-Stil zu verwenden stattfrom os import *; dies stellt sicher, dass das, was sich mit dem Betriebssystem ändert,os.open()wird nicht die eingebaute Funktion open() überschreiben.
Bei der Verwendung großer Module wie os sind die eingebauten Funktionen dir() und help() sehr nützlich:
>>> import os >>> dir(os) <returns a list of all module functions> >>> help(os) <returns an extensive manual page created from the module's docstrings>
Für alltägliche Aufgaben der Datei- und Verzeichnisverwaltung bietet das Modul :mod:shutil eine benutzerfreundliche High-Level-Schnittstelle:
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
Datei-Wildcards
Das Modul glob bietet eine Funktion zum Erzeugen von Dateilisten aus Verzeichnis-Wildcard-Suchen:
Beispiel
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
Kommandozeilenargumente
Gängige Hilfsskripte rufen oft Kommandozeilenargumente auf. Diese Kommandozeilenargumente werden in der argv-Variable des sys-Moduls in Listenform gespeichert. Zum Beispiel erhält man nach Ausführung von "python demo.py one two three" in der Kommandozeile die folgende Ausgabe:
Beispiel
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
Umleitung der Fehlerausgabe und Programmbeendigung
sys hat auch die Attribute stdin, stdout und stderr; selbst wenn stdout umgeleitet ist, kann stderr verwendet werden, um Warnungen und Fehlermeldungen anzuzeigen.
Beispiel
Warning, log file not found starting a new one
Die meisten Skripte verwenden die gezielte Beendigungsys.exit()。
Musterabgleich für Zeichenketten mit regulären Ausdrücken
reDas Modul bietet Werkzeuge für reguläre Ausdrücke zur fortgeschrittenen Zeichenkettenverarbeitung. Für komplexe Musterabgleiche und -verarbeitung bieten reguläre Ausdrücke prägnante, optimierte Lösungen:
Beispiel
>>> 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 Sie nur einfache Funktionalität benötigen, sollten Sie zuerst String-Methoden in Betracht ziehen, denn sie sind sehr einfach, leicht zu lesen und zu debuggen:
>>> 'tea for too'.replace('too', 'two')
'tea for two'
Math
mathDas Modul bietet Zugriff auf die zugrunde liegende C-Funktionsbibliothek für Gleitkommaoperationen:
Beispiel
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
randomBietet Werkzeuge zum Generieren von Zufallszahlen.
Beispiel
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # Stichprobenentnahme ohne Zurücklegen
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # zufällige Gleitkommazahl
0.17970987693706186
>>> random.randrange(6) # zufällige Ganzzahl aus range(6) gewählt
4
Zugriff auf das Internet
Es gibt mehrere Module für den Zugriff auf das Internet und den Umgang mit Netzwerkkommunikationsprotokollen. Die beiden einfachsten sind urllib.request für die Verarbeitung von Daten, die von URLs empfangen werden, und smtplib zum Versenden von E-Mails:
Beispiel
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
... line = line.decode('utf-8') # Binärdaten in Text dekodieren.
... if 'EST' in line or 'EDT' in line: # nach Eastern Time suchen
... print(line)
<BR>Nov. 25, 09:43:32 PM EST
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Hüte dich vor den Iden des März.
... """)
>>> server.quit()
Beachten Sie, dass das zweite Beispiel einen lokal laufenden Mailserver erfordert.
Datum und Uhrzeit
datetimeDas Modul bietet sowohl einfache als auch komplexe Methoden für die Datums- und Uhrzeitverarbeitung.
Während Datums- und Uhrzeitarithmetik unterstützt wird, liegt der Fokus der Implementierung auf effizienterer Verarbeitung und formatierter Ausgabe.
Beispiel
# Aktuelles Datum und aktuelle Uhrzeit abrufen
current_datetime = datetime.datetime.now()
print(current_datetime)
# Aktuelles Datum abrufen
current_date = datetime.date.today()
print(current_date)
# Datum formatieren
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime) # Ausgabe: 2023-07-17 15:30:45
Das Ausgabeergebnis ist:
2023-07-17 18:37:56.036914 2023-07-17 2023-07-17 18:37:56
Das Modul unterstützt außerdem den Umgang mit Zeitzonen:
>>> # 导入了 datetime 模块中的 date 类
>>> from datetime import date
>>> now = date.today() # 当前日期
>>> now
datetime.date(2023, 7, 17)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'07-17-23. 17 Jul 2023 is a Monday on the 17 day of July.'
>>> # 创建了一个表示生日的日期对象
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday # 计算两个日期之间的时间差
>>> age.days # 变量age的days属性,表示时间差的天数
21535
Datenkomprimierung
Die folgenden Module unterstützen direkt gängige Datenpaketierungs- und Komprimierungsformate: zlib, gzip, bz2, 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
Leistungsmessung
Einige Benutzer sind daran interessiert, die Leistungsunterschiede zwischen verschiedenen Methoden zur Lösung desselben Problems zu kennen. Python bietet ein Messwerkzeug, das direkte Antworten auf diese Fragen liefert.
Zum Beispiel wirkt die Verwendung von Packen und Entpacken von Tupeln zum Vertauschen von Elementen viel ansprechender als die Verwendung traditioneller Methoden; timeit beweist, dass die moderne Methode schneller ist.
>>> 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 Vergleich zur feinen Granularität von timeit bieten die Module :mod:profile und pstats Zeitmesswerkzeuge für größere Codeblöcke.
Testen von Modulen
Eine Möglichkeit, hochwertige Software zu entwickeln, besteht darin, für jede Funktion Testcode zu entwickeln und während des Entwicklungsprozesses häufig zu testen.
Das doctest-Modul bietet ein Werkzeug, das Module scannt und Tests basierend auf eingebetteten Docstrings im Programm ausführt.
Die Testerstellung ist so einfach wie das Ausschneiden und Einfügen der Ausgabe in den Docstring.
Durch vom Benutzer bereitgestellte Beispiele wird die Dokumentation verbessert, sodass das doctest-Modul bestätigen kann, ob die Ergebnisse des Codes mit der Dokumentation übereinstimmen:
def average(values):
"""Computes the arithmetic mean of a list of numbers.
>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod() # 自动验证嵌入测试
Das unittest-Modul ist nicht so einfach zu verwenden wie das doctest-Modul, kann aber eine umfassendere Testsuite in einer separaten Datei bereitstellen:
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)
self.assertRaises(ZeroDivisionError, average, [])
self.assertRaises(TypeError, average, 20, 30, 70)
unittest.main() # Calling from the command line invokes all tests
Was wir oben gesehen haben, ist nur ein Teil der Module der Python3-Standardbibliothek. Es gibt viele weitere Module. Die vollständige Dokumentation der Standardbibliothek können Sie in der offiziellen Dokumentation einsehen:https://docs.python.org/zh-cn/3/library/index.html
Andere Erweiterungen