Erilaisten tiedostotilojen käyttäminen
Pyyhkäise näyttääksesi valikon
Eri tiedostotilojen käyttö Pythonissa tiedostojen lukemiseen, kirjoittamiseen ja lisäämiseen käytännön esimerkkien avulla.
Pythonin tiedostotilat sisältävät: 'r' lukemiseen, 'w' kirjoittamiseen (luo/ylikirjoittaa), 'a' lisäämiseen (luo, jos puuttuu), 'b' binääritilaan ja '+' luku/kirjoitustilaan. Oikean tilan valinta estää tietojen menetyksen.
Lukutila
Lukutila ('r') avaa olemassa olevan tiedoston vain lukemista varten. Tiedostoa ei voi kirjoittaa tai muokata tässä tilassa. Jos tiedostoa ei ole olemassa, Python nostaa FileNotFoundError-poikkeuksen. Tätä tilaa käytetään, kun halutaan lukea tiedoston tietoja ilman muutoksia sen sisältöön.
123456with open("sample.txt", "w") as f: f.write("This is a sample file.\nSecond line.") with open("sample.txt", "r") as f: content = f.read() print(content)
Tämä koodi luo tekstitiedoston esimerkkisisällöllä ja lukee sekä tulostaa tiedoston sisällön.
Kirjoitustila
Kirjoitustila (w) Pythonissa avaa tiedoston kirjoittamista varten. Käytä w-tilaa, kun haluat aloittaa uuden tiedoston tai tyhjentää olemassa olevan tiedoston ja korvata sen sisällön. Huomioi: kaikki olemassa oleva tieto tiedostossa menetetään, kun avaat sen w-tilassa.
1234567891011with open("write_example.txt", "w") as file: file.write("This file was created or overwritten using write mode.\n") with open("write_example.txt", "r") as file: print(file.read()) with open("write_example.txt", "w") as file: file.write("Every time you run this code, the contents are replaced.\n") with open("write_example.txt", "r") as file: print(file.read())
Tämä koodi näyttää tiedoston sisällön ensimmäisen kirjoituksen jälkeen ja sitten ylikirjoituksen jälkeen, jotta näet kuinka aiempi data poistetaan ja korvataan uudella sisällöllä.
Liitetila
Liitetila, joka määritellään tiedostotilalla 'a', avaa tiedoston kirjoittamista varten lisäämällä uutta sisältöä tiedoston loppuun. Jos tiedostoa ei ole olemassa, se luodaan automaattisesti. Tätä tilaa käytetään, kun halutaan säilyttää olemassa oleva data ja lisätä vain uutta tietoa loppuun, esimerkiksi lokimerkintöjen tai tietueiden päivittämisen yhteydessä. Toisin kuin kirjoitustila ('w'), liitetila ei koskaan poista tai korvaa olemassa olevaa sisältöä.
123456789with open("append_example.txt", "w") as f: f.write("Original line\n") with open("append_example.txt", "a") as f: f.write("Appended line\n") with open("append_example.txt", "r") as f: result = f.read() print(result.strip())
Tämä koodi luo ensin tiedoston, jossa on alkuperäistä sisältöä. Sen jälkeen sama tiedosto avataan liitetilassa ('a'), jolloin tiedoston loppuun lisätään uusi rivi. Lopuksi koko tiedoston sisältö luetaan ja tulostetaan, jotta näet, että uusi data lisättiin loppuun poistamatta tai muuttamatta alkuperäistä sisältöä.
Binääritila
Binääritilaa käytetään, kun tiedostoja tarvitsee lukea tai kirjoittaa tavuina tekstin sijaan. Tämä on olennaista, kun käsitellään muita kuin tekstitiedostoja, kuten kuvia, äänitiedostoja tai suoritettavia tiedostoja. 'b' yhdistetään muihin tiedostotiloihin, esimerkiksi 'rb' tarkoittaa lukemista binääritilassa ja 'wb' kirjoittamista binääritilassa.
Kun tiedosto avataan binääritilassa, data luetaan ja kirjoitetaan täsmälleen raakatavuina. Koodausta tai dekoodausta ei tapahdu, joten dataa täytyy käsitellä bytes-olioina. Tämä estää ongelmat, joita voi syntyä, kun luetaan tai kirjoitetaan tiedostoja, jotka eivät käytä tavallista tekstikoodausta.
12345678byte_data = b"\x48\x65\x6c\x6c\x6f, binary world!" # This is 'Hello, binary world!' in bytes with open("sample_binary.bin", "wb") as f: f.write(byte_data) with open("sample_binary.bin", "rb") as f: read_bytes = f.read() print(read_bytes)
Koodi kirjoittaa tavujonon, joka sisältää viestin 'Hello, binary world!', tiedostoon nimeltä sample_binary.bin käyttäen kirjoitus-binaaritilaa ('wb'). Tilassa oleva b varmistaa, että tiedostoa käsitellään binääridatana, ei tekstinä. Kirjoittamisen jälkeen tiedosto avataan uudelleen luku-binaaritilassa ('rb') raakatavujen lukemista varten. Koodi tulostaa tavuobjektin ihmisen luettavassa muodossa.
Luku- ja kirjoitustila
r+-tiedostotila mahdollistaa sekä olemassa olevan tiedoston lukemisen että kirjoittamisen. Kun avaat tiedoston r+-tilassa, voit lukea sen sisällön, muokata sitä tai lisätä uutta dataa mihin tahansa kohtaan. Tiedoston on kuitenkin oltava olemassa valmiiksi – r+ ei luo uutta tiedostoa, jos määritettyä nimeä ei löydy.
Tämä tila on hyödyllinen, kun haluat päivittää tai käsitellä tiedoston tietoja menettämättä sen nykyistä sisältöä. Kaikki kirjoitustoiminnot alkavat nykyisestä tiedostokohdistimen sijainnista, joten voit hallita tarkasti, mihin muutokset kohdistuvat käyttämällä esimerkiksi seek()-menetelmää.
1234567891011121314151617# Writing initial content to the file with open("data.txt", "w") as f: f.write("First line\nSecond line\n") # Opening the file in r+ mode for reading and updating with open("data.txt", "r+") as f: # Reading and printing the original content original_content = f.read() print("Before update:\n" + original_content.strip()) # Moving file pointer to the beginning f.seek(0) # Overwriting the first line f.write("Updated first line\n") # Moving pointer to the start to read the updated content f.seek(0) updated_content = f.read() print("After update:\n" + updated_content.strip())
Tämä tuloste osoittaa, että tiedoston ensimmäinen rivi korvattiin onnistuneesti. Käyttämällä luku/kirjoitus-tilaa ('r+') voit päivittää tiedoston tiettyjä osia – esimerkiksi muuttaa vain ensimmäisen rivin – ilman, että koko tiedosto täytyy poistaa tai kirjoittaa uudelleen. Tämä on hyödyllistä, kun haluat muokata olemassa olevaa dataa säilyttäen muun sisällön.
Kun käytät 'r+'-tilaa, kaikki uusi kirjoitettu data korvaa olemassa olevan sisällön nykyisestä tiedostosoittimen kohdasta alkaen. Jos uusi sisältö on lyhyempi kuin alkuperäinen, vanhan rivin ylijäämäosa jää tiedostoon. Tämä tarkoittaa, että aiemman sisällön osittaisia jäänteitä voi näkyä uuden kirjoituksen jälkeen. Tiedostoa ei katkaista automaattisesti, joten alkuperäisen sisällön ylimääräiset merkit voivat säilyä uuden datan lopussa.
1. Mitä tiedostotilaa tulisi käyttää, jos haluat lukea olemassa olevan tekstitiedoston muuttamatta sitä?
2. Mitä tiedostotilaa tulisi käyttää, jos haluat lisätä uutta dataa olemassa olevan tekstitiedoston loppuun poistamatta sen nykyistä sisältöä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme