14.395 pregleda

Serijal tekstova: Zajedno naučimo Python (9. dio) – Datoteke

10

Pozdrav svima! Dobrodošli u deveti Python tutorial. Zasad smo obradili više-manje sve važne stvari za uvodni serijal. Međutim, ako smo dosad, uz svo znanje koje smo stekli, radili program, po završetku programa nije nam ostalo ništa. Ovdje mislim na nekakav rezultat ili stanje u, primjerice, tekstualnoj datoteci (npr. tablica građana od prethodnog puta).

Kako bismo mogli spremiti određene stvari koje radimo u programu, a isto tako i koristiti neke od prije, koristimo određene metode za manipulaciju s datotekama.

Za početak, ako želimo nešto spremiti u datoteku, prvo ju trebamo otvoriti. Za to koristimo funkciju open(). Ova funkcija prima kao prvi argument string, tj. ime datoteke, dok je drugi argument način otvaranja datoteke. Oboje se svakako mora pisati unutar navodnih znakova. Primjer je prikazan ispod:

datoteka = open(“datoteka.txt”, “w”)

Jedino što eventualno još nije jasno je način otvaranja datoteke odnosno mod. U ovom slučaju je to w koje označava da se radi o pisanju u datoteku. Osim tog moda, postoji ih još nekolicina; koristit ćemo w (engl. write) za pisanje, r (engl. read) za čitanje, wr (engl. write & read) za čitanje i pisanje te ćemo eventualno još tim slovima dodati slovo b (engl. binary) za čitanje odnosno pisanje u binarnom načinu.

Ako želimo nešto zapisati u datoteku, za to koristimo metodu .write(). U nastavku je prikazan primjer:

datoteka.write(“Ovo je prvi redak :)”)

I na kraju, kako bi se sve što smo dosad napisali spremilo, potrebno je datoteku zatvoriti. Za to koristimo metodu .close().

datoteka.close()

Ono što treba napomenuti jest da se datoteka sprema u onaj direktorij u kojem se nalazi i sam program. Ako otvorite datoteku datoteka.txt pomoću tekst editora, vidjet ćete da je u njemu upisan upravo onaj tekst koji smo mi upisali.

Python 09 Slika 01

Također, ako ne želite provjeravati uneseni tekst pomoću tekst editora, to možete i pomoću Pythona. Prije smo spomenuli način rada za pisanje, ali postoji način rada i za čitanje. Stoga, ako pri otvaranju datoteke kao drugi argument stavimo r, moći ćemo pročitati sadržaj datoteke (datoteka mora prethodno biti zatvorena i tek se nakon toga može otvoriti u novom načinu rada).

datoteka = open(“datoteka.txt”, “r”)

Sada kada smo datoteku otvorili, potrebno je pročitati njen sadržaj. To se radi pomoću metode .read(). Kako bismo to prikazali na ekranu, imamo više načina; prvi je da se sve stavi u funkciju print():

print(datoteka.read())

ili možemo sadržaj spremiti u novu varijablu koju onda kasnije koristimo kroz program:

sadrzaj = datoteka.read()
print(sadrzaj)

NAPOMENA: Ako želite pisati više teksta u datoteku, a to ne radite odjednom već u više navrata, NEMOJTE koristiti način rada w. Razlog tome je što ovaj način rada briše stari sadržaj i piše novi. U tom slučaju koristite način rada a (engl. append) koji na kraj datoteke dodaje nove vrijednosti odnosno tekst.

Kod čitanja i pisanja datoteka također trebamo paziti na jednu stvar, a radi se o novom retku. Ako se tekst proteže kroz nekoliko redaka i razlog tomu je korištenje tipke Enter za novi redak, na tom mjestu se generira znak “\n”. Kako kod manipuliranja sadržajem ne bismo imali problema, onda se zna koristiti metoda .rstrip() koji s desne strane retka ukloni znak “\n”.

Kao posljednji zadatak vezan uz tekstualne datoteke, obradit ćemo spremanje tablice u datoteku te ju kasnije pročitati.

Za početak ćemo napraviti polje s imenom, prezimenom i mjestom rođenja:

polje = [[Iva, Ivić, Split],[Marko, Markić, Poreč],[Janko, Jankić, Čakovec]]

Nakon toga, probat ćemo upisati sadržaj preko for iteracije u datoteku. To radimo na sljedeći način:

Python 09 Slika 02U for iteraciji radimo sljedeće; prvo rastavljamo glavnu listu na podliste. Onda sve elemente podliste spajamo znakom “;” (to može biti bilo koji znak) i to uz pomoć metode .join(). Nakon toga, na kraj reda dodajemo “\n” za prelazak u novi red. Zatim slijedi zapisivanje tog sadržaja u datoteku. Kada smo podatke spremili u datoteku, na kraju je moramo zatvoriti.

Sada je, kako bismo provjerili što se nalazi u datoteci, možemo pogledati preko nekog tekst editora, ali možemo i napisati kod koji će čitati ono što se nalazi u datoteci. To radimo na sljedeći način:

 Python 09 Slika 03

Prvo otvaramo datoteku u modu za čitanje. Nakon toga, uz for iteraciju radimo sve red po red. Prvo uz .rstrip() metodu uklanjamo “\n” na kraju reda. Zatim ćemo natrag podijeliti elemente unutar liste kako bismo ih kasnije mogli dohvatiti pomoću metode .split(). I naravno, na kraju tu listu dodajemo u glavnu listu i zatvaramo datoteku.

Rezultat bi trebao biti ovakav:

Python 09 Slika 04

Ukratko, što se tiče rada s datotekama mislim da ne bih trebao previše komplicirati oko teorije, već ću prijeći na praktični zadatak. Današnji zadatak će biti da napravimo downloader datoteka.

Prije početka, potrebno je spomenuti da ćemo koristiti vanjski modul urllib. Pomoću ovog modula moći ćemo doći do sadržaja na internetu i kasnije ga preuzeti i spremiti u direktorij u kojem se nalazi naš program. Stoga, na početak programa pišemo:

from urllib.request import urlopen

Iz ovog modula uzet ćemo metodu urlopen koja nam omogućava preuzimanje sadržaja s interneta.

Poslije ovoga slijede funkcije. Zapravo, cijeli program ćemo napraviti pomoću funkcija kako bi bio što fleksibilniji i lakši za neke buduće promjene.

Prvo radimo funkciju za unos URL-a: Python 09 Slika 05Ovdje nema ništa previše za reći, ali važno je da ova funkcija vraća vrijednost, odnosno, vraća URL koji se prosljeđuje nekim drugim funkcijama.

Jedna od tih funkcija je funkcija provjera. Ovdje ćemo koristiti nešto što se zove iznimka (engl. exception). Radi se o tome da nekad u programu možemo očekivati određenu grešku prilikom unosa, pa kako se program ne bi “raspao”, postoje mehanizmi koji umjesto nas odrade posao.

Python 09 Slika 06
O samom manipuliranju iznimkama bismo mogli posebno pričati, međutim, u tu priču neću previše ulaziti. Dovoljno je znati da pomoću ključne riječi try govorimo programu da proba izvršiti određeni dio koda. Ako u ovom slučaju URL neće biti pravilan, javit će nam grešku, odnosno “URL je neispravan”. S druge strane, ako će URL biti pravilan, prikazat će se poruka “URL je ispravan” i vratit će vrijednost True. Ova vraćena vrijednost će nam poslužiti da se u slučaju ispravnog URL-a kasnije izvrši preuzimanje i spremanje datoteke. U suprotnom će se program prekinuti.

Sljedeća funkcija se tiče preuzimanja datoteke, a potreban joj je URL što je i argument funkcije. U varijablu odgovor spremat ćemo rezultat metode urlopen(). Ovdje ćemo se povezati s određenom adresom i dobiti pristup sadržaju. U sljedećem koraku će se taj sadržaj zapisati u varijablu sadrzaj. Odmah zatim trebamo zatvoriti vezu s internetom pomoću metode .close(). Kao rezultat funkcije vratit će se sadrzaj, odnosno sadržaj datoteke koji smo preuzeli. Python 09 Slika 07 Nakon preuzimanja, vrijeme je da damo ime datoteci koju smo preuzeli. Međutim, prije toga, važnije je da ono što preuzmemo ima odgovarajuću ekstenziju. Većina datoteka (slika, tekst, video…) u samoj adresi ima naznačenu i ekstenziju. Za sve to također je potreban URL, odnosno adresa preko koje ćemo dobiti ekstenziju i ona nam je argument funkcije. Ekstenzija je većinom na kraju i to ćemo iskoristiti u našu korist. U varijablu d ćemo spremati broj, odnosno mjesto na kojem se nalazi prva točka gledana s desne strane (točka prije ekstenzije). U sljedećem koraku ćemo pomoću slicinga izrezati samo ekstenziju i kasnije ju pridružiti imenu datoteke. S druge strane, to će nam poslužiti da ispišemo i tip datoteke, međutim, varijablu d u tom slučaju povećavamo za 1 kako bismo izrezali i točku van iz stringa. Na kraju se korisnika traži da unese ime (bez ekstenzije) i to bi trebalo izgledati ovako:

Python 09 Slika 08

Sada slijedi ono što smo danas naučili, a tiče se zapisivanja podataka u datoteku. Funkcija će kao argumente dobiti prethodno napravljeno ime te sadržaj koji ćemo zapisati u datoteku. Stvaramo varijablu datoteka pomoću koje stvaramo novu datoteku imena koje smo prije odabrali, te “wb” način rada, odnosno zapisivanje na binarni način. Nakon toga, sadržaj se zapisuje u datoteku te se datoteka zatvara:

Python 09 Slika 09

I za sam kraj, potrebno je pozvati funkcije i svakoj od njih pridružiti odgovarajuće argumente:

Python 09 Slika 10

Rezultat programa možete vidjeti na sljedećoj slici:

Python 09 Slika 11

Mislim da je današnji tutorial bio vrlo zanimljiv i poučan. Sada možete raditi razne programe, a sav rad je moguće zabilježiti. Stoga, zadatke vam neću zadavati, nego budite kreativni i iskoristite što ste naučili 🙂

Do sljedećeg puta,

Nikola

VN:F [1.9.22_1171]
Rating: 4.8/5 (18 votes cast)
Serijal tekstova: Zajedno naučimo Python (9. dio) - Datoteke, 4.8 out of 5 based on 18 ratings

10 komentara

  1. Igor napisao:

    Hoce li ubrzo nastavak?

  2. Nikola napisao:

    Nažalost, trenutno imam jako puno posla i jednostavno ne stignem napisati sljedeći tutorial, međutim, bit će sigurno napisan u 12. mjesecu.

  3. iso57 napisao:

    Pa gdje su ti novi nastavci
    čamim čekajući
    Inače za ovo dosad svaka cast

  4. Pero napisao:

    Gde da nadjem prethodne serijale?

  5. Cijad napisao:

    Hoce li uskoro novi tutorijal ? Svaka cast za dosadasnji rad, sve pohvale 😀

  6. muller napisao:

    hoće li upće biti nastavka?

  7. Zoran napisao:

    A kako raditi upisivanje i čitanje lista sa realnim brojevima jer pri čitanju fajla vraća se lista u vidu stringa ?

Ostavi komentar

© 2017 Linux Za Sve. | Impressum | Sadržaj je licenciran pod CC-SA-3.0 ako nije drugačije naznačeno.
Proudly designed by Theme Junkie.