Python-bestands-I/O: bestandsbewerkingen, lezen, schrijven en beheer beheersen
Python-bestands-I/O
Leer hoe je bestanden in Python opent, leest, schrijft en sluit met duidelijke voorbeelden en best-practice technieken.
Video: Bestanden lezen en schrijven in Python
Bestanden
Bestanden zijn benoemde locaties op schijf die data persistent opslaan. Omdat RAM vluchtig is, vertrouwen we op bestanden om informatie tussen programma-uitvoeringen te bewaren.
Bij interactie met een bestand is de typische volgorde: openen → lezen/schrijven → sluiten.
Bestanden openen in Python
Python's ingebouwde open()-functie retourneert een bestandsobject voor I/O-bewerkingen. De handtekening is:
open(bestand, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Belangrijke punten:
modecontroleert de operatie:r(lezen),w(schrijven, truncateert),a(toevoegen),x(exclusief aanmaken).t(tekst) is standaard;b(binair) retourneertbytes-objecten.+staat simultaan lezen en schrijven toe.- Specificeer altijd
encodingbij tekstbestanden om platform-afhankelijke standaarden te vermijden (bijv.cp1252op Windows,utf-8op Linux).
| Modus | Beschrijving |
|---|---|
r | Lezen (standaard) |
w | Schrijven; nieuw aanmaken of bestaand truncaten |
x | Exclusief aanmaken; faalt als bestand bestaat |
a | Toevoegen; aanmaken als ontbrekend |
t | Tekstmodus (standaard) |
b | Binaire modus |
+ | Lezen en schrijven |
f = open("test.txt") # r/rt
f = open("test.txt", "w") # schrijven
f = open("img.bmp", "r+b") # lezen/schrijven binair
Omdat a een karakter is, is het niet gelijk aan 97 tenzij geëncodeerd. Stel expliciet encoding='utf-8' in voor tekstbestanden.
f = open("test.txt", mode='r', encoding='utf-8')
Bestanden sluiten in Python
Correct sluiten van een bestand vrijwaart systeembronnen. De close()-methode is eenvoudig, maar een context manager is het veiligste patroon.
with open("test.txt", encoding='utf-8') as f:
# bestandsbewerkingen uitvoeren
pass
De context manager garandeert sluiting zelfs als een exception optreedt. Als je handmatig opent, wrap het in een try...finally-blok.
try:
f = open("test.txt", encoding='utf-8')
# bewerkingen
finally:
f.close()
Naar bestanden schrijven in Python
Gebruik w, a of x modus om te schrijven. w overschrijft bestaande inhoud; a behoudt het.
De write()-methode accepteert een string (of bytes voor binair) en retourneert het aantal geschreven karakters.
with open("test.txt", "w", encoding='utf-8') as f:
f.write("mijn eerste bestand\n")
f.write("Dit bestand\n\n")
f.write("bevat drie regels\n")
Vergeet niet newline-karakters op te nemen om regels te scheiden.
Bestanden lezen in Python
Open met r modus. De read()-methode accepteert een optioneel size-argument; weglaten leest tot EOF.
f = open("test.txt", "r", encoding='utf-8')
print(f.read(4)) # 'Dit '
print(f.read(4)) # 'is '
print(f.read()) # resterende inhoud
f.close()
Verplaats de cursor met seek() en vraag de positie op met tell():
print(f.tell()) # huidige positie
f.seek(0) # terug naar begin
print(f.read()) # alles lezen
Efficiënt itereren over regels:
for regel in f:
print(regel, end='')
Alternatief bieden readline() en readlines() regel-voor-regel toegang.
Python-bestandsmethoden
Hieronder een beknopt overzicht van de meest voorkomende bestandsmethoden in tekstmodus.
| Methode | Beschrijving |
|---|---|
| close() | Sluit het bestand. |
| detach() | Los de onderliggende binaire buffer los. |
| fileno() | Retourneert het bestandsdescriptor. |
| flush() | Flush de schrijfbuffer. |
| isatty() | Controleer of de stream interactief is. |
| read(n) | Lees tot n karakters; None leest tot EOF. |
| readable() | Is de stream leesbaar? |
| readline(n=-1) | Lees een enkele regel, tot n karakters. |
| readlines(n=-1) | Retourneert lijst van regels, tot n karakters. |
| seek(offset, from_=SEEK_SET) | Verplaats cursor naar offset vanaf from_ (start, huidig, einde). |
| seekable() | Kan de stream random access ondersteunen? |
| tell() | Haal huidige cursorpositie op. |
| truncate(size=None) | Wijzig bestandsgrootte naar size bytes. |
| writable() | Is de stream schrijfbaar? |
| write(s) | Schrijf string s; retourneert aantal geschreven karakters. |
| writelines(lines) | Schrijf een iterable van strings. |
Python
- C Input en Output (I/O) Beheersen: scanf() en printf() Uitgelegd
- Bestands-I/O in C: Bestanden aanmaken, openen, lezen en schrijven
- C# Bestands-I/O Beheersen: Lezen, Schrijven en Streams Beheren
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python-lijstbewerkingen: aanmaken, benaderen, wijzigen en geavanceerde technieken
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python-bestands-I/O: bestandsbewerkingen, lezen, schrijven en beheer beheersen
- Bestands- en directory-bestaat controleren in Python – Een praktische gids
- Python JSON: Encoding, Decoding en Bestandsafhandeling – Een Praktische Gids
- Python Bestands I/O: In- en uitvoerbewerkingen onder de knie krijgen