Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python-bestand I/O

Python-bestand I/O

In deze zelfstudie leert u over Python-bestandsbewerkingen. Meer specifiek, een bestand openen, ervan lezen, erin schrijven, sluiten en verschillende bestandsmethoden waarvan u op de hoogte moet zijn.

Video:bestanden lezen en schrijven in Python

Bestanden

Bestanden zijn benoemde locaties op schijf om gerelateerde informatie op te slaan. Ze worden gebruikt om gegevens permanent op te slaan in een niet-vluchtig geheugen (bijv. harde schijf).

Aangezien Random Access Memory (RAM) vluchtig is (dat zijn gegevens verliest wanneer de computer wordt uitgeschakeld), gebruiken we bestanden voor toekomstig gebruik van de gegevens door ze permanent op te slaan.

Als we willen lezen van of schrijven naar een bestand, moeten we het eerst openen. Als we klaar zijn, moet het worden gesloten, zodat de bronnen die aan het bestand zijn gekoppeld, worden vrijgemaakt.

Daarom vindt in Python een bestandsbewerking plaats in de volgende volgorde:

  1. Een bestand openen
  2. Lezen of schrijven (handeling uitvoeren)
  3. Sluit het bestand

Bestanden openen in Python

Python heeft een ingebouwde open() functie om een ​​bestand te openen. Deze functie retourneert een bestandsobject, ook wel een handle genoemd, omdat het wordt gebruikt om het bestand dienovereenkomstig te lezen of te wijzigen.

>>> f = open("test.txt")    # open file in current directory
>>> f = open("C:/Python38/README.txt")  # specifying full path

We kunnen de modus specificeren tijdens het openen van een bestand. In de modus specificeren we of we r . willen lezen , schrijf w of voeg a toe naar het bestand. We kunnen ook specificeren of we het bestand in tekstmodus of binaire modus willen openen.

De standaardinstelling is lezen in tekstmodus. In deze modus krijgen we strings bij het lezen van het bestand.

Aan de andere kant retourneert de binaire modus bytes en dit is de modus die moet worden gebruikt bij het omgaan met niet-tekstbestanden zoals afbeeldingen of uitvoerbare bestanden.

Modus Beschrijving
r Opent een bestand om te lezen. (standaard)
w Opent een bestand om te schrijven. Creëert een nieuw bestand als het niet bestaat of kapt het bestand af als het wel bestaat.
x Opent een bestand voor exclusieve creatie. Als het bestand al bestaat, mislukt de bewerking.
a Opent een bestand om aan het einde van het bestand toe te voegen zonder het af te kappen. Creëert een nieuw bestand als het niet bestaat.
t Opent in tekstmodus. (standaard)
b Opent in binaire modus.
+ Opent een bestand om te updaten (lezen en schrijven)
f = open("test.txt")      # equivalent to 'r' or 'rt'
f = open("test.txt",'w')  # write in text mode
f = open("img.bmp",'r+b') # read and write in binary mode

In tegenstelling tot andere talen, is het teken a impliceert niet het getal 97 totdat het is gecodeerd met ASCII (of andere gelijkwaardige coderingen).

Bovendien is de standaardcodering platformafhankelijk. In Windows is dit cp1252 maar utf-8 onder Linux.

We moeten dus niet ook vertrouwen op de standaardcodering, anders zal onze code zich op verschillende platforms anders gedragen.

Daarom wordt het ten zeerste aanbevolen om het coderingstype op te geven wanneer u met bestanden in tekstmodus werkt.

f = open("test.txt", mode='r', encoding='utf-8')

Bestanden sluiten in Python

Wanneer we klaar zijn met het uitvoeren van bewerkingen op het bestand, moeten we het bestand correct sluiten.

Als u een bestand sluit, komen de bronnen vrij die aan het bestand waren gekoppeld. Het wordt gedaan met behulp van de close() methode beschikbaar in Python.

Python heeft een garbage collector om objecten zonder referentie op te ruimen, maar we moeten er niet op vertrouwen om het bestand te sluiten.

f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()

Deze methode is niet helemaal veilig. Als er een uitzondering optreedt wanneer we een bewerking met het bestand uitvoeren, wordt de code afgesloten zonder het bestand te sluiten.

Een veiligere manier is om een ​​try...final block te gebruiken.

try:
   f = open("test.txt", encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

Op deze manier garanderen we dat het bestand correct wordt afgesloten, zelfs als er een uitzondering wordt gemaakt waardoor de programmastroom stopt.

De beste manier om een ​​bestand te sluiten is door de with . te gebruiken uitspraak. Dit zorgt ervoor dat het bestand wordt gesloten wanneer het blok binnen de with verklaring is afgesloten.

We hoeven de close() . niet expliciet aan te roepen methode. Het wordt intern gedaan.

with open("test.txt", encoding = 'utf-8') as f:
   # perform file operations

Schrijven naar bestanden in Python

Om in Python naar een bestand te schrijven, moeten we het openen in write w , voeg a toe of exclusieve creatie x modus.

We moeten voorzichtig zijn met de w modus, omdat het in het bestand wordt overschreven als het al bestaat. Hierdoor worden alle eerdere gegevens gewist.

Het schrijven van een string of reeks bytes (voor binaire bestanden) wordt gedaan met behulp van de write() methode. Deze methode retourneert het aantal tekens dat naar het bestand is geschreven.

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

Dit programma maakt een nieuw bestand aan met de naam test.txt in de huidige map als deze niet bestaat. Als het bestaat, wordt het overschreven.

We moeten de tekens van de nieuwe regel zelf toevoegen om de verschillende regels te kunnen onderscheiden.


Bestanden lezen in Python

Om een ​​bestand in Python te lezen, moeten we het bestand openen in het lezen van r modus.

Hiervoor zijn verschillende methoden beschikbaar. We kunnen de read(size) . gebruiken methode om de grootte . in te lezen aantal gegevens. Als de maat parameter niet is opgegeven, leest en keert terug tot het einde van het bestand.

We kunnen de text.txt . lezen bestand dat we in de bovenstaande sectie op de volgende manier hebben geschreven:

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)    # read the first 4 data
'This'

>>> f.read(4)    # read the next 4 data
' is '

>>> f.read()     # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'

>>> f.read()  # further reading returns empty sting
''

We kunnen zien dat de read() methode retourneert een nieuwe regel als '\n' . Zodra het einde van het bestand is bereikt, krijgen we bij verder lezen een lege string.

We kunnen onze huidige bestandscursor (positie) wijzigen met de seek() methode. Evenzo is de tell() methode geeft onze huidige positie terug (in aantal bytes).

>>> f.tell()    # get the current file position
56

>>> f.seek(0)   # bring file cursor to initial position
0

>>> print(f.read())  # read the entire file
This is my first file
This file
contains three lines

We kunnen een bestand regel voor regel lezen met een for-lus. Dit is zowel efficiënt als snel.

>>> for line in f:
...     print(line, end = '')
...
This is my first file
This file
contains three lines

In dit programma bevatten de regels in het bestand zelf een teken voor een nieuwe regel \n . We gebruiken dus de parameter end van de print() functie om twee nieuwe regels te vermijden bij het afdrukken.

Als alternatief kunnen we de readline() . gebruiken methode om afzonderlijke regels van een bestand te lezen. Deze methode leest een bestand tot aan de nieuwe regel, inclusief het teken voor de nieuwe regel.

>>> f.readline()
'This is my first file\n'

>>> f.readline()
'This file\n'

>>> f.readline()
'contains three lines\n'

>>> f.readline()
''

Ten slotte, de readlines() methode retourneert een lijst met resterende regels van het hele bestand. Al deze leesmethoden retourneren lege waarden wanneer het einde van het bestand (EOF) is bereikt.

>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']

Python-bestandsmethoden

Er zijn verschillende methoden beschikbaar met het bestandsobject. Sommigen van hen zijn gebruikt in de bovenstaande voorbeelden.

Hier is de volledige lijst met methoden in tekstmodus met een korte beschrijving:

Methode Beschrijving
close() Sluit een geopend bestand. Het heeft geen effect als het bestand al gesloten is.
losmaken() Scheidt de onderliggende binaire buffer van de TextIOBase en retourneert het.
fileno() Retourneert een geheel getal (bestandsdescriptor) van het bestand.
flush() Flusht de schrijfbuffer van de bestandsstroom.
isatty() Retourneert True als de bestandsstream interactief is.
read(n ) Leest maximaal n tekens uit het bestand. Leest tot het einde van het bestand als het negatief is of None .
leesbaar() Retourneert True als de bestandsstroom kan worden gelezen.
readline(n =-1) Leest en retourneert één regel uit het bestand. Leest maximaal n . in bytes indien gespecificeerd.
readlines(n =-1) Leest en retourneert een lijst met regels uit het bestand. Leest maximaal n . in bytes/tekens indien gespecificeerd.
zoeken(offset ,van =SEEK_SET ) Verandert de bestandspositie in offset bytes, met verwijzing naar van (begin, huidig, einde).
seekable() Retourneert True als de bestandsstream willekeurige toegang ondersteunt.
tel() Retourneert de huidige bestandslocatie.
truncate(grootte .) =None ) Verkleint de bestandsstroom naar grootte bytes. Als maat is niet gespecificeerd, wordt aangepast naar de huidige locatie.
schrijfbaar() Retourneert True als er naar de bestandsstroom kan worden geschreven.
write(s ) Schrijft de string s naar het bestand en geeft het aantal geschreven tekens terug.
writelines(lines ) Schrijft een lijst met regels naar het bestand.

Python

  1. C Ingang Uitgang (I/O)
  2. Python-gegevenstypen
  3. Python-operators
  4. Python-lijst
  5. Python-woordenboek
  6. Python-bestand I/O
  7. Python controleren of bestand bestaat | Hoe te controleren of er een directory bestaat in Python
  8. Python JSON:coderen (dumps), decoderen (laden) &JSON-bestand lezen
  9. C - Bestand I/O
  10. C# - Bestand I/O
  11. Python - Bestanden I/O