Obrada datoteka u programskom jeziku Python
U bilo kom programskom jeziku, manipulacija datotekama predstavlja ključni element. Python, takođe, pruža snažnu podršku za rad sa datotekama, omogućavajući različite operacije poput čitanja, pisanja i mnoge druge.
Nakon prolaska kroz ovaj vodič, bićete sposobni da:
- Otvarate i čitate datoteke u Python-u.
- Čitate pojedinačne linije iz tekstualnih datoteka.
- Pišete i dodajete sadržaj u datoteke.
- Koristite menadžere konteksta prilikom rada sa datotekama u Python-u.
Kako čitati datoteku u Python-u
Za otvaranje datoteke u Python-u, možete koristiti opštu sintaksu: open('naziv_datoteke', 'režim')
.
- Gde je ‘naziv_datoteke’ stvarni naziv datoteke koju želite otvoriti.
Napomena: Ako se datoteka nalazi u istom direktorijumu kao i vaš trenutni radni prostor, dovoljno je navesti samo njen naziv. U suprotnom, neophodno je obezbediti punu putanju do datoteke.
- Parametar ‘režim’ određuje svrhu otvaranja datoteke (npr. čitanje, pisanje).
Podrazumevani režim za otvaranje datoteke je čitanje, označeno sa ‘r’. Ipak, preporučuje se da se režim eksplicitno navede prilikom otvaranja datoteke.
Pre nego što nastavimo, pogledajmo sadržaj datoteke „lib.txt“ koju ćemo koristiti kao primer.
📁 Tekstualnu datoteku i kod koji se koristi u ovom uputstvu možete preuzeti sa ovog GitHub repozitorijuma.
Sledeći kod prikazuje kako možete otvoriti i pročitati tekstualnu datoteku ‘lib.txt’ u Python-u pomoću funkcije open()
:
file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
U datom primeru:
- Funkcija
open()
vraća objekat datoteke, koji mi nazivamofile
. - Potom pozivamo metodu
read()
na objektufile
. - Sadržaj datoteke je sada smešten u promenljivu
contents
, koju potom ispisujemo. - Na kraju, zatvaramo datoteku koristeći metodu
close()
.
Međutim, ako zaboravite zatvoriti datoteku, može doći do gubitka resursa. Ukoliko radite sa velikim brojem datoteka, to može rezultirati značajnim opterećenjem memorije, jer se otvaraju datoteke koje se ne zatvaraju na vreme.
Sada ćemo naučiti bolji način za otvaranje datoteka koristeći menadžere konteksta. Primer korišćenja je prikazan u sledećem isečku koda.
with open('lib.txt','r') as f: contents = f.read() print(contents)
Kada koristite menadžere konteksta, ne morate eksplicitno pozivati metodu close()
. Datoteke se automatski zatvaraju po završetku I/O operacije.
Kako čitati linije iz datoteke u Python-u
U našem primeru datoteke, imali smo samo nekoliko linija teksta. Dakle, čitanje celog sadržaja odjednom nije predstavljalo problem.
Međutim, prilikom rada sa velikim datotekama, korišćenje metode read()
možda neće biti najefikasnije rešenje.
Zapravo, ako je tekstualna datoteka veoma velika, brzo možete ostati bez raspoložive memorije. Zato je ponekad bolje čitati red po red iz tekstualne datoteke, a kako se to radi pokazaćemo u ovom odeljku.
Korišćenje Python-ove readline()
metode za čitanje linija iz datoteke
Metoda readline()
čita jedan red iz datoteke.
Pogledajte sledeći primer koda:
with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Output Hello, there! Here are a few helpful Python libraries:
Može se videti da se nakon prvog poziva metode readline()
ispisuje prvi red iz datoteke. Drugi poziv metode readline()
vraća drugi red iz datoteke.
To je zato što se nakon prvog poziva, pokazivač datoteke nalazi na početku drugog reda.
U Python-u, možete koristiti metodu tell()
da biste dobili trenutnu poziciju pokazivača datoteke. Metodom seek()
, možete premeštati pokazivač datoteke na određenu lokaciju.
U sledećem primeru, koristimo f.seek(0)
nakon prvog poziva metode. Ovo postavlja pokazivač datoteke na početak tekstualne datoteke. Zbog toga se prvi red iz datoteke ispisuje oba puta:
with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Output Hello, there! Hello, there!
Korišćenje Python-ove readlines()
metode za čitanje linija iz datoteke
Postoji još jedna srodna metoda, a to je readlines()
.
Pokretanjem sledećeg koda, videćete da metoda readlines()
vraća listu svih linija iz datoteke.
with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Output ['Hello, there!n', 'Here are a few helpful Python libraries:n', '1) NumPyn', '2) pandasn', '3) matplotlibn', '4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', '7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']
Korišćenje Python-ove for
petlje za čitanje linija iz datoteke
Takođe možete koristiti for
petlju za čitanje redova iz tekstualne datoteke.
Nakon što imate objekat datoteke, možete koristiti for
petlju za iteraciju kroz sadržaj datoteke – red po red, i ispisivanje svakog reda, kao što je prikazano ispod. Obratite pažnju kako pristupamo samo jednom redu u jednom trenutku, i ne čitamo ceo sadržaj datoteke odjednom.
with open('lib.txt','r') as f: for line in f: print(line, end='')
Napomena: Kada koristite Python-ovu funkciju print()
, podrazumevani separator je znak za novi red – \n
. Međutim, u originalnoj datoteci, mi nemamo ove nove redove. Zbog toga, postavljamo argument separatora na prazan string: end = ''
kako bismo ispisali sadržaj datoteke onako kako jeste.
Kako čitati delove sadržaja iz datoteke u Python-u
U Python-u, takođe možete čitati sadržaj datoteke u manjim delovima.
Pogledajte sledeći kod:
- Postavljamo
chunk_size
na 50. To znači da će prvih 50 karaktera iz datoteke biti pročitano, i biće ispisano.
- Sada pozovite metodu
tell()
na objektu datotekef
. Videćete da je pokazivač datoteke sada na poziciji 51, što je i očekivano.
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Current position of file pointer: {current}") # Output Hello, there! Here are a few helpful Python librar Current position of file pointer: 51
Ovu tehniku možete koristiti i za čitanje cele datoteke u manjim delovima.
Sledeći primer prikazuje kako se to radi:
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
Ovde koristimo while
petlju za čitanje sadržaja datoteke. Čitamo sadržaj datoteke u delovima veličine 50 sve dok ne stignemo do kraja datoteke. ✅
Kako pisati u datoteku u Python-u
Da biste pisali u tekstualnu datoteku u Python-u, treba je otvoriti u režimu pisanja – specificirajući ‘w’.
Sledeći kod prikazuje kako se to radi:
with open('new_file.txt','w') as f: f.write('Hello, Python!')
Videćete da je ‘new_file.txt’ kreirana u vašem radnom direktorijumu.
Sada pokrenite gornju ćeliju koda još jednom.
U svom terminalu pokrenite sledeću komandu:
cat new_file.txt # Output: Hello, Python!
U idealnom slučaju, pisali smo u datoteku dva puta. Dakle, ‘Hello, Python!’ je trebalo da se ispiše dva puta, zar ne?
Ali videćete da je ispisan samo jednom. Pa, to je zato što kada otvorite datoteku u režimu pisanja (w), vi u suštini prepišete njen sadržaj novim sadržajem.
Ako želite da dodajete sadržaj na kraj datoteke bez prepisivanja postojećeg, trebalo bi da otvorite datoteku u režimu dodavanja. Kako se to radi videćete u sledećem odeljku.
Kako dodati sadržaj u datoteku u Python-u
Ukoliko želite da dodate sadržaj u datoteku bez prepisivanja, otvorite je u režimu dodavanja.
Za to se koristi ‘a’ za append (dodavanje) i režim se mora eksplicitno navesti.
Zatim, pokrenite sledeći kod dva puta:
with open('new_file.txt','a') as f: f.write('Hello, Python!')
Obratite pažnju da se tekst ispisuje dva puta, pošto smo ga dodali u datoteku.
cat new_file.txt # Output: Hello, Python!Hello, Python!
Zaključak
Hajde da sumiramo ono što smo prošli u ovom vodiču.
- Naučili ste najčešće I/O operacije nad datotekama, kao što su čitanje, pisanje i dodavanje u datoteku.
- Pored toga, naučili ste kako da koristite metodu
seek()
za premeštanje pokazivača datoteke na određenu poziciju. - Takođe, naučili ste kako da koristite metodu
tell()
za preuzimanje trenutne pozicije pokazivača datoteke.
Nadam se da vam je ovaj vodič bio koristan. Sada kada ste naučili kako da radite sa tekstualnim datotekama u Python-u, naučite kako da radite sa JSON datotekama u Python-u.
Povezano:
Proverite dužinu liste u Python-u u 3 koraka.