suchen
HeimBackend-EntwicklungPython-TutorialPython-Methoden zum Lesen, Schreiben und Erstellen von Dateien

Der Betrieb von Dateien und Ordnern (Dateibetriebsfunktionen) in Python erfordert das OS-Modul und das Shutil-Modul.

Ruft das aktuelle Arbeitsverzeichnis ab, also den Verzeichnispfad, in dem das aktuelle Python-Skript arbeitet: os.getcwd()

Gibt alle Datei- und Verzeichnisnamen im angegebenen Verzeichnis zurück : os.listdir()

Die Funktion wird zum Löschen einer Datei verwendet: os.remove()

Mehrere Verzeichnisse löschen: os.removedirs(r "c:python")

Überprüfen Sie, ob der angegebene Pfad eine Datei ist: os.path.isfile()

Überprüfen Sie, ob der angegebene Pfad ein Verzeichnis ist: os.path.isdir()

Überprüfen ob es sich um einen absoluten Pfad handelt: os.path.isabs()

Überprüfen Sie, ob der angegebene Pfad tatsächlich existiert: os.path.exists()

Gibt den Verzeichnisnamen und den Dateinamen von a zurück Pfad: os.path.split() zB os.path.split('/home/swaroop/byte/code/poem.txt') Ergebnis: ('/home/swaroop/byte/code', 'poem.txt' )

Split-Erweiterungsname: os.path.splitext()

Pfadnamen abrufen: os.path.dirname()

Dateinamen abrufen: os.path.basename ()

Shell-Befehle ausführen: os.system()

Umgebungsvariablen lesen und festlegen: os.getenv() und os.putenv()

gibt den Zeilenabschluss an Wird von der aktuellen Plattform verwendet: os.linesep Windows verwendet „rn“, Linux verwendet „n“ und Mac verwendet „r“

Geben Sie an, welche Plattform Sie verwenden: os.name Für Windows ist es „nt“ und für Linux/Unix-Benutzer ist es „posix“

Umbenennen: os.rename(old, new)

Mehrstufiges Verzeichnis erstellen: os.makedirs(r „c:pythontest“)

Ein einzelnes Verzeichnis erstellen: os.mkdir („test“)

Dateiattribute abrufen: os.stat (Datei)

Dateiberechtigungen und Zeitstempel ändern: os.chmod (Datei)

Aktuellen Prozess beenden: os.exit()

Dateigröße abrufen: os.path.getsize(filename)


Dateivorgang:
os.mknod(" test.txt") Erstellen Sie eine leere Datei
fp = open("test.txt",w) Öffnen Sie eine Datei direkt. Wenn die Datei nicht vorhanden ist, erstellen Sie die Datei

Über den Öffnungsmodus:

w öffnet sich zum Schreiben,
a öffnet sich im Anhängemodus (beginnt mit EOF, erstellt bei Bedarf eine neue Datei)
r+ öffnet sich im Lese-/Schreibmodus
w+ öffnet im Lese-/Schreibmodus (siehe w)
a+ Öffnet im Lese-/Schreibmodus (siehe a)
rb Öffnet im binären Lesemodus
wb Öffnet im binären Schreibmodus (siehe w)
ab Im binären Anhängemodus öffnen (siehe a)
rb+ Im binären Lese-/Schreibmodus öffnen (siehe r+)
wb+ Im binären Lese-/Schreibmodus öffnen (siehe w+)
ab+ Im binären Lese-/Schreibmodus öffnen Modus (siehe a+)

fp.read([size]) #size ist die Länge des Lesevorgangs in Bytes

fp.readline([size]) #Eine Zeile lesen Wenn Wenn die Größe definiert ist, ist es möglich, nur einen Teil der Zeile zurückzugeben.

fp.readlines([size]) # Behandeln Sie jede Zeile der Datei als Mitglied einer Liste und geben Sie diese Liste zurück. Tatsächlich wird es intern durch den Aufruf von readline() in einer Schleife implementiert. Wenn der Größenparameter angegeben wird, stellt die Größe die Gesamtlänge des gelesenen Inhalts dar, was bedeutet, dass nur ein Teil der Datei gelesen werden darf.

fp.write(str) #Write str in die Datei write() fügt nach str kein Newline-Zeichen hinzu.

fp.writelines(seq) #Write seq Alle Inhalte werden geschrieben in die Datei geschrieben (mehrere Zeilen werden gleichzeitig geschrieben). Diese Funktion schreibt auch einfach originalgetreu, ohne nach jeder Zeile etwas hinzuzufügen.

fp.close() #Schließen Sie die Datei. Python schließt eine Datei automatisch, wenn sie nicht mehr verwendet wird. Diese Funktion ist jedoch nicht garantiert. Es ist am besten, die Gewohnheit zu entwickeln, sie selbst zu schließen. Wenn eine Datei nach dem Schließen bearbeitet wird, wird ein ValueError generiert

fp.flush() #Den Inhalt des Puffers auf die Festplatte schreiben

fp.fileno() # Geben Sie eine lange Ganzzahl zurück. Geben Sie „Dateibezeichnung“ ein.

fp.isatty() #Ob es sich bei der Datei um eine Terminalgerätedatei handelt (in einem Unix-System)

fp.tell() #Gibt den aktuellen Wert zurück Position der Dateioperationsmarkierung, wobei der Anfang der Datei als Ursprung genommen wird

fp.next() #Zur nächsten Zeile zurückkehren und die Dateioperationsmarkierung in die nächste Zeile verschieben. Wenn eine Datei in einer Anweisung wie for...in file verwendet wird, wird die Funktion next() aufgerufen, um die Traversierung zu implementieren.

fp.seek(offset[,whence]) #Bewegen Sie die Dateioperationsmarkierung an die Offset-Position. Dieser Versatz wird im Allgemeinen relativ zum Dateianfang berechnet und ist im Allgemeinen eine positive Zahl. Dies trifft jedoch nicht unbedingt zu, wenn der Wherece-Parameter angegeben wird. Wherece kann 0 sein, um die Berechnung von Anfang an zu starten, und 1, um die aktuelle Position als Ursprung zu verwenden. 2 gibt an, dass das Ende der Datei als Ausgangspunkt für die Berechnung verwendet wird. Es ist zu beachten, dass beim Öffnen der Datei im a- oder a+-Modus die Dateioperationsmarkierung bei jedem Schreibvorgang automatisch zum Ende der Datei zurückkehrt.

fp.truncate([size]) #Schneiden Sie die Datei auf die angegebene Größe. Standardmäßig wird auf die Position der aktuellen Dateioperationsmarkierung geschnitten. Wenn die Größe größer als die Dateigröße ist, wird die Datei je nach System möglicherweise nicht geändert, die Datei wird möglicherweise mit 0 auf die entsprechende Größe aufgefüllt oder es werden zufällige Inhalte hinzugefügt.

Verzeichnisoperation:
os.mkdir("file") Verzeichnis erstellen
Datei kopieren:
shutil.copyfile("oldfile", "newfile") Sowohl oldfile als auch newfile können nur Dateien sein
shutil.copy("oldfile","newfile") oldfile kann nur ein Ordner sein, newfile kann eine Datei oder ein Zielverzeichnis sein
Kopieren Sie den Ordner:
shutil.copytree("olddir","newdir " ) Sowohl olddir als auch newdir können nur Verzeichnisse sein und newdir darf nicht existieren
Dateien (Verzeichnisse) umbenennen
os.rename("oldname", "newname") Verwenden Sie diesen Befehl für Dateien oder Verzeichnisse
Dateien verschieben (Verzeichnisse)
shutil.move("oldpos","newpos")
Dateien löschen
os.remove("file")
Verzeichnisse löschen
os.rmdir( "dir") kann nur leere Verzeichnisse löschen
shutil.rmtree("dir") Sowohl leere Verzeichnisse als auch Verzeichnisse mit Inhalt können gelöscht werden
Verzeichnis konvertieren
os.chdir("path") Pfad ändern

Python liest und schreibt Dateien

1.open
Nachdem Sie open zum Öffnen einer Datei verwendet haben, müssen Sie daran denken, die Methode close() des Dateiobjekts aufzurufen. Beispielsweise können Sie mit der try/finally-Anweisung sicherstellen, dass die Datei endgültig geschlossen werden kann.

file_object = open('thefile.txt')
versuchen Sie:
all_the_text = file_object.read( )
zum Schluss:
file_object.close( )

Hinweis: Die open-Anweisung kann nicht im try-Block platziert werden, da das Dateiobjekt file_object die Methode close() nicht ausführen kann, wenn beim Öffnen der Datei eine Ausnahme auftritt.

2. Datei lesen
Textdatei lesen
input = open('data', 'r')
#Der zweite Parameter ist standardmäßig r
input = open(' data ')

Binärdatei lesen
input = open('data', 'rb')

Alle Inhalte lesen
file_object = open('thefile. txt' )
versuchen Sie:
all_the_text = file_object.read( )
endlich:
file_object.close( )

Feste Bytes lesen
file_object = open ('abinfile ', 'rb')
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally :
file_object.close( )

Jede Zeile lesen
list_of_all_the_lines = file_object.readlines( )

Wenn es sich bei der Datei um eine Textdatei handelt, können Sie sie auch durchlaufen Direktes Dateiobjekt erhält jede Zeile:

für Zeile in Datei_Objekt:
Verarbeitungszeile

3 Datei schreiben
Textdatei schreiben
Ausgabe = öffnen(' data ', 'w')

Binärdatei schreiben
Ausgabe = open('data', 'wb')

Schreibdatei anhängen
Ausgabe = open('data', 'w+')

Daten schreiben
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

Mehrere Zeilen schreiben
file_object.writelines(list_of_text_strings)

Beachten Sie, dass der Aufruf von writelines zum Schreiben mehrerer Zeilen effizienter ist als die gleichzeitige Verwendung von Write zu hoch.

Bei der Verarbeitung von Protokolldateien stoßen wir häufig auf eine solche Situation: Die Protokolldatei ist riesig und es ist unmöglich, die gesamte Datei auf einmal zur Verarbeitung einzulesen Bei einem Computer mit einem physischen Speicher von 2 GB möchten wir möglicherweise nur 200 MB des Inhalts gleichzeitig verarbeiten.
In Python stellt das integrierte File-Objekt direkt eine readlines(sizehint)-Funktion bereit, um so etwas zu erreichen. Nehmen Sie den folgenden Code als Beispiel:

file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position

Jedes Mal, wenn die readlines(sizehint)-Funktion aufgerufen wird, werden ungefähr 200 MB Daten zurückgegeben, und die zurückgegebenen Daten müssen Da die Zeilendaten vollständig sind, ist die Anzahl der zurückgegebenen Daten in den meisten Fällen etwas größer als der durch sizehint angegebene Wert (außer wenn die Funktion readlines(sizehint) zum letzten Mal aufgerufen wird). Normalerweise passt Python den vom Benutzer angegebenen Sizehint-Wert automatisch an ein ganzzahliges Vielfaches der internen Cache-Größe an.

Datei ist ein spezieller Typ in Python, der zum Betrieb externer Dateien in Python-Programmen verwendet wird. Alles in Python ist ein Objekt, und Datei ist keine Ausnahme. Datei hat Dateimethoden und -attribute. Schauen wir uns zunächst an, wie man ein Dateiobjekt erstellt:


file(name[, mode[, buffering]])
Die Funktion file() wird verwendet, um ein Dateiobjekt zu erstellen, das möglicherweise anschaulicher ist sind eingebaute Funktionen. Werfen wir einen Blick auf seine Parameter. Seine Parameter werden alle in Form von Zeichenfolgen übergeben. Name ist der Name der Datei.
Modus ist der offene Modus, die optionalen Werte sind r w a U, die Lese- (Standard) bzw. Schreibmodi darstellen, die verschiedene Zeilenumbrüche unterstützen. Wenn Sie eine Datei im W- oder A-Modus öffnen und die Datei nicht existiert, wird sie automatisch erstellt. Wenn Sie den W-Modus zum Öffnen einer vorhandenen Datei verwenden, wird außerdem der Inhalt der Originaldatei gelöscht, da sich die anfängliche Dateioperationsmarkierung am Anfang der Datei befindet. Wenn Sie zu diesem Zeitpunkt einen Schreibvorgang ausführen, wird der Originalinhalt gelöscht wird zweifellos gelöscht. Aus historischen Gründen gibt es für das Zeilenumbruchzeichen in verschiedenen Systemen unterschiedliche Modi. Unter Unix ist es beispielsweise ein „n“ und unter Windows ist es „rn“. Das Öffnen einer Datei im U-Modus unterstützt alle Zeilenumbruchmodi. r' 'n' 'rn' kann alle Zeilenumbrüche darstellen, und es wird ein Tupel zum Speichern der in dieser Datei verwendeten Zeilenumbruchzeichen verwendet. Obwohl es viele Arten des Zeilenumbruchs gibt, wird beim Lesen in Python stattdessen n verwendet. Nach dem Moduszeichen können Sie auch die beiden Zeichen + b t hinzufügen, die jeweils angeben, dass die Datei gleichzeitig gelesen und geschrieben werden kann und die Datei im Binärmodus oder Textmodus (Standard) geöffnet werden kann.
Wenn die Pufferung 0 ist, bedeutet dies keine Pufferung. Wenn sie 1 ist, bedeutet dies „Zeilenpufferung“. Wenn sie eine Zahl größer als 1 ist, bedeutet dies die Größe des Puffers, die in Bytes angegeben werden sollte.

Das Dateiobjekt verfügt über eigene Eigenschaften und Methoden. Schauen wir uns zunächst die Attribute der Datei an.


geschlossen #Markieren Sie, ob die Datei geschlossen wurde, neu geschrieben durch close()
Kodierung #Dateikodierung
Modus #Öffnungsmodus
Name #Dateiname
Zeilenumbrüche # In der Datei Der verwendete Newline-Modus ist ein Tupel
Softspace #boolean-Typ, normalerweise 0. Es soll zum Lesen und Schreiben verwendet werden print

Datei:

F.read( [size] ) #size ist die Länge des Lesevorgangs in Bytes
F.readline([size])
#Eine Zeile lesen Wenn die Größe definiert ist, ist es möglich, nur einen Teil der Zeile zurückzugeben
F.readlines ([size])
# Behandeln Sie jede Zeile der Datei als Mitglied einer Liste und geben Sie diese Liste zurück. Tatsächlich wird es intern durch den Aufruf von readline() in einer Schleife implementiert. Wenn der Größenparameter angegeben wird, stellt die Größe die Gesamtlänge des gelesenen Inhalts dar, was bedeutet, dass nur ein Teil der Datei gelesen werden darf.
F.write(str)
#Write str in die Datei write() fügt nach str kein Newline-Zeichen hinzu
F.writelines(seq)
#Write seq Alle Inhalte werden geschrieben zur Datei. Diese Funktion schreibt auch einfach originalgetreu, ohne nach jeder Zeile etwas hinzuzufügen.

Andere Dateimethoden:

F.close()
#Schließen Sie die Datei. Python schließt eine Datei automatisch, wenn sie nicht mehr verwendet wird. Diese Funktion ist jedoch nicht garantiert. Es ist am besten, die Gewohnheit zu entwickeln, sie selbst zu schließen. Wenn eine Datei nach dem Schließen bearbeitet wird, wird ein ValueError generiert
F.flush()
#Den Inhalt des Puffers auf die Festplatte schreiben
F.fileno()
# Gibt eine lange Ganzzahl vom Typ „Dateibezeichnung“ zurück
F.isatty()
#Ob es sich bei der Datei um eine Terminalgerätedatei handelt (in einem Unix-System)
F.tell()
#Gibt die zurück aktuelle Position der Dateioperationsmarkierung, wobei der Anfang der Datei als Ursprung verwendet wird
F.next()
# Zur nächsten Zeile zurückkehren und die Dateioperationsmarkierung in die nächste Zeile verschieben. Wenn eine Datei in einer Anweisung wie for ... in file verwendet wird, wird die Funktion next() aufgerufen, um die Traversierung zu implementieren.
F.seek(offset[,whence])
#Bewegen Sie die Dateioperationsmarkierung an die Offset-Position. Dieser Versatz wird im Allgemeinen relativ zum Dateianfang berechnet und ist im Allgemeinen eine positive Zahl. Dies trifft jedoch nicht unbedingt zu, wenn der Wherece-Parameter angegeben wird. Wherece kann 0 sein, um die Berechnung von Anfang an zu starten, und 1, um die aktuelle Position als Ursprung zu verwenden. 2 gibt an, dass das Ende der Datei als Ausgangspunkt für die Berechnung verwendet wird. Es ist zu beachten, dass beim Öffnen der Datei im a- oder a+-Modus die Dateioperationsmarkierung bei jedem Schreibvorgang automatisch zum Ende der Datei zurückkehrt.
F.truncate([size])
#Schneiden Sie die Datei auf die angegebene Größe. Standardmäßig wird auf die Position der aktuellen Dateioperationsmarkierung geschnitten. Wenn die Größe größer als die Dateigröße ist, wird die Datei je nach System möglicherweise nicht geändert, die Datei wird möglicherweise mit 0 auf die entsprechende Größe aufgefüllt oder es werden zufällige Inhalte hinzugefügt.

Die oben beschriebene Methode zum Lesen, Schreiben und Erstellen von Dateien in Python (muss gelesen werden) ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe auch, dass jeder PHP unterstützt Chinesische Website.

Weitere Artikel zu Python-Methoden zum Lesen, Schreiben und Erstellen von Dateien finden Sie auf der chinesischen PHP-Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Zusammenführen von Listen in Python: Auswählen der richtigen MethodeZusammenführen von Listen in Python: Auswählen der richtigen MethodeMay 14, 2025 am 12:11 AM

Tomgelistsinpython, Youcanusethe-Operator, ExtendMethod, ListCompredesion, Oritertools.chain, jeweils mitSpezifizierungen: 1) Der OperatorissimpleButlessEfficienceforlargelists; 2) Extendismory-Effizienzbutmodifiestheoriginallist;

Wie verkettet man zwei Listen in Python 3?Wie verkettet man zwei Listen in Python 3?May 14, 2025 am 12:09 AM

In Python 3 können zwei Listen mit einer Vielzahl von Methoden verbunden werden: 1) Verwenden Sie den Bediener, der für kleine Listen geeignet ist, jedoch für große Listen ineffizient ist. 2) Verwenden Sie die Erweiterungsmethode, die für große Listen geeignet ist, mit hoher Speicher -Effizienz, jedoch die ursprüngliche Liste. 3) Verwenden Sie * Operator, der für das Zusammenführen mehrerer Listen geeignet ist, ohne die ursprüngliche Liste zu ändern. 4) Verwenden Sie iTertools.chain, das für große Datensätze mit hoher Speicher -Effizienz geeignet ist.

Python Concatenate List SaitenPython Concatenate List SaitenMay 14, 2025 am 12:08 AM

Die Verwendung der join () -Methode ist die effizienteste Möglichkeit, Zeichenfolgen aus Listen in Python zu verbinden. 1) Verwenden Sie die join () -Methode, um effizient und leicht zu lesen. 2) Der Zyklus verwendet die Bediener für große Listen ineffizient. 3) Die Kombination aus Listenverständnis und Join () eignet sich für Szenarien, die Konvertierung erfordern. 4) Die Verringerung () -Methode ist für andere Arten von Reduktionen geeignet, ist jedoch für die String -Verkettung ineffizient. Der vollständige Satz endet.

Python -Ausführung, was ist das?Python -Ausführung, was ist das?May 14, 2025 am 12:06 AM

PythonexexecutionStheProcessOfTransformingPythonCodeIntoexexexecleableInstructions.1) ThePythonvirtualmachine (PVM) Ausführungen

Python: Was sind die wichtigsten Merkmale?Python: Was sind die wichtigsten Merkmale?May 14, 2025 am 12:02 AM

Zu den wichtigsten Merkmalen von Python gehören: 1. Die Syntax ist prägnant und leicht zu verstehen, für Anfänger geeignet; 2. Dynamisches Typsystem, Verbesserung der Entwicklungsgeschwindigkeit; 3. Reiche Standardbibliothek, Unterstützung mehrerer Aufgaben; 4. Starke Gemeinschaft und Ökosystem, die umfassende Unterstützung leisten; 5. Interpretation, geeignet für Skript- und Schnellprototypen; 6. Support für Multi-Paradigma, geeignet für verschiedene Programmierstile.

Python: Compiler oder Dolmetscher?Python: Compiler oder Dolmetscher?May 13, 2025 am 12:10 AM

Python ist eine interpretierte Sprache, enthält aber auch den Zusammenstellungsprozess. 1) Python -Code wird zuerst in Bytecode zusammengestellt. 2) Bytecode wird von Python Virtual Machine interpretiert und ausgeführt. 3) Dieser Hybridmechanismus macht Python sowohl flexibel als auch effizient, aber nicht so schnell wie eine vollständig kompilierte Sprache.

Python für Loop vs während der Schleife: Wann zu verwenden, welches?Python für Loop vs während der Schleife: Wann zu verwenden, welches?May 13, 2025 am 12:07 AM

UseaforloopwheniteratoverasequenceOrforaPecificNumberoftimes; UseaWhileloopWencontiningUntilAconDitionisMet.ForloopsardealForknown -Sequencies, während whileloopSuituationen mithungeterminediterationen.

Python Loops: Die häufigsten FehlerPython Loops: Die häufigsten FehlerMay 13, 2025 am 12:07 AM

PythonloopscanleadtoErors-ähnliche Finanzeloops, ModificingListsDuringiteration, Off-by-Oneerrors, Zero-Indexingissues und Nestroxinefficiens.toavoidthese: 1) Verwenden Sie

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software