Python Bestands I/O: In- en uitvoerbewerkingen onder de knie krijgen
Dit hoofdstuk behandelt alle basale I/O-functies die beschikbaar zijn in Python. Voor meer functies, raadpleeg de standaard Python-documentatie.
Afprinten naar het scherm
De eenvoudigste manier om output te produceren is het gebruik van de print-instructie waar je nul of meer expressies, gescheiden door komma's, kunt doorgeven. Deze functie converteert de expressies die je doorgeeft naar een string en schrijft het resultaat naar de standaarduitvoer als volgt:
#!/usr/bin/python
print("Python is echt een geweldige taal,", "is het niet?")
Dit produceert het volgende resultaat op je standaardscherm:
Python is echt een geweldige taal, is het niet?
Toetsenbordinvoer lezen
Python biedt twee ingebouwde functies om een regel tekst van de standaardinvoer te lezen, die standaard van het toetsenbord komt. Deze functies zijn:
- raw_input
- input
De raw_input-functie
De raw_input([prompt])-functie leest één regel van de standaardinvoer en retourneert deze als een string (de trailing newline wordt verwijderd).
#!/usr/bin/python
str = raw_input("Voer je invoer in: ")
print("Ontvangen invoer is : ", str)
Dit vraagt je om een willekeurige string in te voeren en zou dezelfde string op het scherm tonen. Toen ik "Hello Python!" intikte, was de output als volgt:
Voer je invoer in: Hello Python Ontvangen invoer is : Hello Python
De input-functie
De input([prompt])-functie is equivalent aan raw_input, behalve dat het ervan uitgaat dat de invoer een geldige Python-expressie is en het geëvalueerde resultaat aan je retourneert.
#!/usr/bin/python
str = input("Voer je invoer in: ")
print("Ontvangen invoer is : ", str)
Dit zou het volgende resultaat produceren tegen de ingevoerde input:
Voer je invoer in: [x*5 for x in range(2,10,2)] Ontvangen invoer is : [10, 20, 30, 40]
Bestanden openen en sluiten
Tot nu toe heb je gelezen en geschreven naar de standaardinvoer en -uitvoer. Nu zullen we zien hoe je echte data-bestanden kunt gebruiken.
Python biedt standaard basisfuncties en methoden die nodig zijn om bestanden te manipuleren. Je kunt de meeste bestandsmanipulatie uitvoeren met behulp van een file-object.
De open-functie
Voordat je een kunt lezen of schrijven, moet je het openen met behulp van Python's ingebouwde open()-functie. Deze functie creëert een file-object, dat vervolgens gebruikt wordt om andere ondersteuningsmethoden aan te roepen die eraan gekoppeld zijn.
Syntaxis
file_object = open(bestandsnaam [, toegang_modus][, buffering])
Hier zijn de parameterdetails:
bestandsnaam − Het bestandsnaam-argument is een string-waarde die de naam van het bestand bevat dat je wilt benaderen.
toegang_modus − De toegang_modus bepaalt de modus waarin het bestand geopend moet worden, namelijk lezen, schrijven, toevoegen, enz. Een complete lijst met mogelijke waarden staat in de onderstaande tabel. Dit is een optionele parameter en de standaard bestands-toegangsmodus is lezen (r).
buffering − Als de buffering-waarde op 0 staat, vindt er geen buffering plaats. Als de buffering-waarde 1 is, wordt regel-buffering uitgevoerd tijdens het benaderen van een bestand. Als je de buffering-waarde als een integer groter dan 1 opgeeft, wordt de buffering-actie uitgevoerd met de aangegeven buffergrootte. Als negatief, is de buffergrootte de systeemstandaard (standaardgedrag).
Hier is een lijst van de verschillende modi voor het openen van een bestand:
| Nr. | Modi & Beschrijving |
|---|---|
| 1 | r Opent een bestand alleen voor lezen. De bestandspointer wordt aan het begin van het bestand geplaatst. Dit is de standaardmodus. |
| 2 | rb Opent een bestand alleen voor lezen in binair formaat. De bestandspointer wordt aan het begin van het bestand geplaatst. Dit is de standaardmodus. |
| 3 | r+ Opent een bestand voor zowel lezen als schrijven. De bestandspointer wordt aan het begin van het bestand geplaatst. |
| 4 | rb+ Opent een bestand voor zowel lezen als schrijven in binair formaat. De bestandspointer wordt aan het begin van het bestand geplaatst. |
| 5 | w Opent een bestand alleen voor schrijven. Overschrijft het bestand als het bestaat. Als het bestand niet bestaat, wordt er een nieuw bestand voor schrijven aangemaakt. |
| 6 | wb Opent een bestand alleen voor schrijven in binair formaat. Overschrijft het bestand als het bestaat. Als het bestand niet bestaat, wordt er een nieuw bestand voor schrijven aangemaakt. |
| 7 | w+ Opent een bestand voor zowel schrijven als lezen. Overschrijft het bestaande bestand als het bestaat. Als het bestand niet bestaat, wordt er een nieuw bestand voor lezen en schrijven aangemaakt. |
| 8 | wb+ Opent een bestand voor zowel schrijven als lezen in binair formaat. Overschrijft het bestaande bestand als het bestaat. Als het bestand niet bestaat, wordt er een nieuw bestand voor lezen en schrijven aangemaakt. |
| 9 | a Opent een bestand voor toevoegen. De bestandspointer is aan het einde van het bestand als het bestand bestaat. Dat wil zeggen, het bestand is in de toevoegmodus. Als het bestand niet bestaat, wordt er een nieuw bestand voor schrijven aangemaakt. |
| 10 | ab Opent een bestand voor toevoegen in binair formaat. De bestandspointer is aan het einde van het bestand als het bestand bestaat. Dat wil zeggen, het bestand is in de toevoegmodus. Als het bestand niet bestaat, wordt er een nieuw bestand voor schrijven aangemaakt. |
| 11 | a+ Opent een bestand voor zowel toevoegen als lezen. De bestandspointer is aan het einde van het bestand als het bestand bestaat. Het bestand opent in de toevoegmodus. Als het bestand niet bestaat, wordt er een nieuw bestand voor lezen en schrijven aangemaakt. |
| 12 | ab+ Opent een bestand voor zowel toevoegen als lezen in binair formaat. De bestandspointer is aan het einde van het bestand als het bestand bestaat. Het bestand opent in de toevoegmodus. Als het bestand niet bestaat, wordt er een nieuw bestand voor lezen en schrijven aangemaakt. |
De file-objectattributen
Eenmaal een bestand geopend en je hebt een file-object, kun je diverse informatie met betrekking tot dat bestand verkrijgen.
Hier is een lijst van alle attributen gerelateerd aan het file-object:
| Nr. | Attribuut & Beschrijving |
|---|---|
| 1 | file.closed Retourneert true als het bestand gesloten is, false anders. |
| 2 | file.mode Retourneert de toegang_modus waarmee het bestand geopend werd. |
| 3 | file.name Retourneert de naam van het bestand. |
| 4 | file.softspace Retourneert false als spatie expliciet vereist is met print, true anders. |
Voorbeeld
#!/usr/bin/python
# Open een bestand
fo = open("foo.txt", "wb")
print("Naam van het bestand: ", fo.name)
print("Gesloten of niet : ", fo.closed)
print("Openmodus : ", fo.mode)
print("Softspace vlag : ", fo.softspace)
Dit produceert het volgende resultaat:
Naam van het bestand: foo.txt Gesloten of niet : False Openmodus : wb Softspace vlag : 0
De close()-methode
De close()-methode van een file-object flushed eventuele ongeschreven informatie en sluit het file-object, waarna niet meer geschreven kan worden.
Python sluit automatisch een bestand wanneer het referentieobject van een bestand aan een ander bestand wordt toegekend. Het is een goede gewoonte om de close()-methode te gebruiken om een bestand te sluiten.
Syntaxis
fileObject.close()
Voorbeeld
#!/usr/bin/python
# Open een bestand
fo = open("foo.txt", "wb")
print("Naam van het bestand: ", fo.name)
# Sluit geopend bestand
fo.close()
Dit produceert het volgende resultaat:
Naam van het bestand: foo.txt
Bestanden lezen en schrijven
Het file-object biedt een set toegangsmethoden om ons leven gemakkelijker te maken. We zullen zien hoe we de read()- en write()-methoden gebruiken om bestanden te lezen en te schrijven.
De write()-methode
De write()-methode schrijft elke string naar een open bestand. Het is belangrijk om te weten dat Python-strings binaire data kunnen bevatten en niet alleen tekst.
De write()-methode voegt geen newline-teken ('\n') toe aan het einde van de string:
Syntaxis
fileObject.write(string)
Hier is de doorgegeven parameter de inhoud die in het geopende bestand geschreven moet worden.
Voorbeeld
#!/usr/bin/python
# Open een bestand
fo = open("foo.txt", "wb")
fo.write("Python is een geweldige taal.\nYeah its great!!\n")
# Sluit geopend bestand
fo.close()
De bovenstaande methode zou het foo.txt-bestand aanmaken en de gegeven inhoud in dat bestand schrijven en ten slotte dat bestand sluiten. Als je dit bestand opent, zou het de volgende inhoud hebben.
Python is een geweldige taal. Yeah its great!!
De read()-methode
De read()-methode leest een string van een open bestand. Het is belangrijk om te weten dat Python-strings binaire data kunnen bevatten, naast tekstdata.
Syntaxis
fileObject.read([count])
Hier is de doorgegeven parameter het aantal bytes dat uit het geopende bestand gelezen moet worden. Deze methode begint met lezen vanaf het begin van het bestand en als count ontbreekt, probeert het zoveel mogelijk te lezen, misschien tot het einde van het bestand.
Voorbeeld
Laten we een bestand foo.txt nemen, dat we hierboven hebben aangemaakt.
#!/usr/bin/python
# Open een bestand
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Gelezen String is : ", str)
# Sluit geopend bestand
fo.close()
Dit produceert het volgende resultaat:
Gelezen String is : Python is
Bestandsposities
De tell()-methode vertelt je de huidige positie binnen het bestand; met andere woorden, de volgende lees- of schrijfoperatie zal op zoveel bytes vanaf het begin van het bestand plaatsvinden.
De seek(offset[, from])-methode verandert de huidige bestandspositie. Het offset-argument geeft het aantal bytes aan dat verplaatst moet worden. Het from-argument specificeert de referentiepositie waarvandaan de bytes verplaatst moeten worden.
Als from op 0 staat, betekent dit dat het begin van het bestand als referentiepositie gebruikt wordt en 1 betekent dat de huidige positie als referentiepositie gebruikt wordt en als het op 2 staat, dan wordt het einde van het bestand als referentiepositie genomen.
Voorbeeld
Laten we een bestand foo.txt nemen, dat we hierboven hebben aangemaakt.
#!/usr/bin/python
# Open een bestand
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Gelezen String is : ", str)
# Controleer huidige positie
positie = fo.tell()
print("Huidige bestandspositie : ", positie)
# Herpositioneer pointer aan het begin nogmaals
positie = fo.seek(0, 0)
str = fo.read(10)
print("Opnieuw gelezen String is : ", str)
# Sluit geopend bestand
fo.close()
Dit produceert het volgende resultaat:
Gelezen String is : Python is Huidige bestandspositie : 10 Opnieuw gelezen String is : Python is
Bestanden hernoemen en verwijderen
Python os-module biedt methoden die je helpen bij bestandsverwerkingsoperaties, zoals hernoemen en verwijderen van bestanden.
Om deze module te gebruiken, moet je het eerst importeren en dan kun je elke gerelateerde functie aanroepen.
De rename()-methode
De rename()-methode neemt twee argumenten: de huidige bestandsnaam en de nieuwe bestandsnaam.
Syntaxis
os.rename(huidige_bestaandsnaam, nieuwe_bestaandsnaam)
Voorbeeld
Hieronder volgt het voorbeeld om een bestaand bestand test1.txt te hernoemen:
#!/usr/bin/python
import os
# Hernoem een bestand van test1.txt naar test2.txt
os.rename("test1.txt", "test2.txt")
De remove()-methode
Je kunt de remove()-methode gebruiken om bestanden te verwijderen door de naam van het te verwijderen bestand als argument door te geven.
Syntaxis
os.remove(bestandsnaam)
Voorbeeld
Hieronder volgt het voorbeeld om een bestaand bestand test2.txt te verwijderen:
#!/usr/bin/python
import os
# Verwijder bestand test2.txt
os.remove("test2.txt")
Mappen in Python
Alle bestanden zijn in diverse mappen opgenomen, en Python heeft geen probleem deze te verwerken. De os-module heeft verschillende methoden die je helpen mappen aan te maken, te verwijderen en te wijzigen.
De mkdir()-methode
Je kunt de mkdir()-methode van de os-module gebruiken om mappen in de huidige map aan te maken. Je moet een argument aan deze methode doorgeven dat de naam van de aan te maken map bevat.
Syntaxis
os.mkdir("nieuwedir")
Voorbeeld
Hieronder volgt het voorbeeld om een map test in de huidige map aan te maken:
#!/usr/bin/python
import os
# Maak een map "test" aan
os.mkdir("test")
De chdir()-methode
Je kunt de chdir()-methode gebruiken om de huidige map te wijzigen. De chdir()-methode neemt een argument, namelijk de naam van de map die je de huidige map wilt maken.
Syntaxis
os.chdir("nieuwedir")
Voorbeeld
Hieronder volgt het voorbeeld om naar de "/home/nieuwedir" map te gaan:
#!/usr/bin/python
import os
# Wijzig map naar "/home/nieuwedir"
os.chdir("/home/nieuwedir")
De getcwd()-methode
De getcwd()-methode toont de huidige werkmap.
Syntaxis
os.getcwd()
Voorbeeld
Hieronder volgt het voorbeeld om de huidige map te geven:
#!/usr/bin/python import os # Dit zou de locatie van de huidige map geven os.getcwd()
De rmdir()-methode
De rmdir()-methode verwijdert de map die als argument in de methode wordt doorgegeven.
Voordat je een map verwijdert, moeten alle inhoud erin verwijderd zijn.
Syntaxis
os.rmdir('dirnaam')
Voorbeeld
Hieronder volgt het voorbeeld om de "/tmp/test" map te verwijderen. Het is vereist om de volledig gekwalificeerde naam van de map te geven, anders zou het naar die map in de huidige map zoeken.
#!/usr/bin/python
import os
# Dit zou de "/tmp/test" map verwijderen.
os.rmdir("/tmp/test")
Bestands- & Mapgerelateerde methoden
Er zijn drie belangrijke bronnen die een breed scala aan hulpmethoden bieden om bestanden & mappen op Windows en Unix-besturingssystemen te verwerken en manipuleren. Zij zijn als volgt:
Bestandsobjectmethoden: Het file-object biedt functies om bestanden te manipuleren.
OS-objectmethoden: Dit biedt methoden om zowel bestanden als mappen te verwerken.
Python
- Wat Is Een Schruif? Uw Complete Gids voor Het Essentiële Hout- en Metaalbewerkingsgereedschap
- C Input en Output (I/O) Beheersen: scanf() en printf() Uitgelegd
- C Bestandsbehandeling: I/O onder de knie krijgen met fopen, fprintf, fread en fseek
- Bestands-I/O in C: Bestanden aanmaken, openen, lezen en schrijven
- C Header-bestanden begrijpen: Typen, gebruik en best practices
- File I/O in C++ Beheersen: Lezen en Schrijven met fstream
- C# Bestands-I/O Beheersen: Lezen, Schrijven en Streams Beheren
- Python I/O en Module Imports onder de knie krijgen: Een praktische gids
- Python-bestands-I/O: bestandsbewerkingen, lezen, schrijven en beheer beheersen
- Python-directory en bestandsbewerkingen beheersen
- Bestands- en directory-bestaat controleren in Python – Een praktische gids