Ovde je primer fajla UI (unos/izlaz):

# Док је фајл
излазни_фајл = open("тест.txt", "w")
излазни_фајл.write("Овај текст иде у излазни фајл\nПогледајте га и видите!")
излазни_фајл.close()

# Прочитајте фајл
унос_фајл = open("тест.txt", "r")
текст = унос_фајл.read()
унос_фајл.close()

print текст

Izlaz i sadržaj datoteke тест.txt su:

Овај текст иде у излазни фајл
Погледајте га и видите!

Obratite pažnju da je napisao fajl koji se zove тест.txt u direktorijumu iz kog se pokreće program. \n u nizu govori da Pajton stavi nnovi red gde je to stavljeno.

Pregled fajla UI je:

  • Dobijanje objekta fajla pomoću open funkcije.
  • Čitajte ili pišite u objektu fajla (u zavisnosti od toga kako je otvoreno)
  • Zatvorite ga

Prvi korak je da dobijete objekat fajla. Način da ovo uradite je da koristite open funkciju. Format je фајл_објекат = open(имефајла, режим) gde je фајл_објекат promenljiva u koju se stavlja objekat fajla, имефајла je niz sa imenom fajla, i режим je "r" kao rpročitati fajl ili "w" kao vpisanje u fajlu (i nekoliko drugih ćemo preskočiti ovde). Sledeće su kako se funkcije objekta fajla mogu nazivati. Dve najčešće funkcije su читање i писање. Funkcija читање dodaje niz na kraju fajla. Funkcija читање čita sledeću stvar u fajlu i pretvara je u niz. Ako nije dat argument vratiće ceo fajl (kao što je urađeno u primeru).

Ovde je nova verzija programa brojeva telefona koji smo napravili ranije:

def штампај_бројеве(бројеви):
    print "Бројеви телефона:"
    for x in бројеви.keys():
        print "Име:", x, "\tБрој:", бројеви[x]
    print

def додај_број(бројеви, име, број):
    бројеви[име] = број

def потражи_број(бројеви, име):
    if име in бројеви:
        return "Број је " + бројеви[име]
    else:
        return име + " није нађено"

def обриши_број(бројеви, име):
    if име in бројеви:
        del бројеви[име]
    else:
        print име," није нађено"

def учитај_бројеви(бројеви, имефајла):
    унос_фајл = open(имефајла, "r")
    for унос_фајл in унос_фајл:
        унос_фајл = унос_фајл.rstrip('\n') #Елиминишите крај линије или унесите        
        име, број = унос_линије.split(",")
        бројеви[име] = број
    унос_фајл.close()

def сачувај_бројеви(бројеви, имефајла):
    излаз_фајл = open(имефајла, "w")
    for x in бројеви.keys():
        излаз_фајл.write(x + "," + бројеви[x] + "\n")
    излаз_фајл.close()

def штампај_мени():
    print '1. Штампај број телефона'
    print '2. Додај број телефона'
    print '3. Обриши број телефона'
    print '4. Тражи број телефона'
    print '5. Учитани бројеви'
    print '6. Сачувај бројеве'
    print '7. Заврши'
    print

телефонска_листа = {}
мени_изабери = 0
штампај_мени()
while True:
    мени_изабери = input("Укуцај број (1-7): ")
    if мени_изабери == 1:
        штампај_бројеви(телефонска_листа)
    elif мени_изабери == 2:
        print "Додај име и број"
        име = raw_input("Име: ")
        телефон = raw_input("Број: ")
        додај_број(телефонска_листа, име, телефон)
    elif мени_изабери == 3:
        print "Обриши име и број"
        име = raw_input("Име: ")
        обриши_број(телефонска_листа, име)
    elif мени_изабери == 4:
        print "Пронађи број"
        име = raw_input("Име: ")
        print пронађи_број(телефонска_листа, име)
    elif мени_изабери == 5:
        имефајла = raw_input("Датотека за учитавање: ")
        учитај_бројеви(телефонска_листа, имефајла)
    elif мени_изабери == 6:
        filename = raw_input("Filename to save: ")
        save_numbers(телефонска_листа, имефајла)
    elif мени_изабери == 7:
        break
    else:
        штампај_мени()

print "Довиђења"

Obratite pažnju da sada obuhvata čuvanje i učitavanje fajlova. Ovo su neki izlazi kada se dva puta pokrene:

1. Штампај број телефона
2. Додај број телефона
3. Обриши број телефона
4. Тражи број телефона
5. Учитани бројеви
6. Сачувај бројеве
7. Заврши

Укуцај број (1-7): 2
Додај име и број
Име: Џил
Број: 1234
Укуцај број (1-7): 2
Додај име и број
Име: Фред
Број: 4321
Укуцај број (1-7): 1
Број телефона:
Име: Џил     Број: 1234
Име: Фред     Број: 4321

Укуцај број (1-7): 6
Датотека за чување: бројеви.txt
Укуцај број (1-7): 7
Довићења
1. Штампај број телефона
2. Додај број телефона
3. Обриши број телефона
4. Тражи број телефона
5. Учитани бројеви
6. Сачувај бројеве
7. Заврши

Укуцај број (1-7): 5
Датотека за учитавање: бројеви.txt
Укуцај број (1-7): 1
Број телефона:
Име: Џил     Број: 1234
Име: Фред    Број: 4321

Укуцај број (1-7): 7
Довиђења

Novi delovi ovog programa su:

def учитај_бројеви(бројеви, имефајла):
    унос_фајл = open(имефајла, "r")
    while True:
        унос_фајл = унос_фајл.readline()
        if not унос_фајл:
            break
        унос_фајл = унос_фајл[:-1]
        име, број = унос_фајл.split(",")
        бројеви[име] = број
    унос_фајл.close()
def сачувај_бројеви(бројеви, имефајла):
    излаз_фајл = open(имефајла, "w")
    for x in бројеви.keys():
        излаз_фајл.write(x + "," + бројеви[x] + "\n")
    излаз_фајл.close()

Prvo ćemo pogledati deo za čuvanje programa. Prvo stvara objekat fajla sa komandom open(имефајла, "w"). Prolazi zatim kroz njega i stvara red za svaki broj telefona sa komandom излаз_фајл.write(x + "," + бројеви[x] + "\n"). Ovo piše liniju koja sadrži ime, zarez, broj i prati ga u novi red.

Deo učitavanja je malo komplikovaniji. Počinje uzimanjem objekta fajla. Zatim koristi while True: petlju koja nastavlja pretraživanje dok ne naiđe na break izjavu. Zatim uzima liniju linijom унос_линија = унос_фајл.readline(). readline funkcija će vratiti prazan niz kada se dođe do kraja fajla. if izjava proverava za ovo i break van while petlje kada se to dogodi. Naravno ako readline nije vratila novi red na kraju linije neće biti šanse da kažete ako je prazan niz prazan red ili kraj ovog fajla pa je novi red ostao u čemu readline vraća. Stoga moramo da se otarasimo nove linije. Linija унос_линија = унос_линија[:-1] to radi za nas tako što ispušta poslednji znak. Sledeća linija име, број = унос_линија.split(",") deli liniju na zarezom na ime i broj. Ovo se zatim dodaje u бројевима rečnika.

Vežbe

uredi

Sada menjajte program ocene iz sekcije Rečnici tako da koristi datoteku UI da vodi evidenciju o učenicima.

Otkrivena je petlja šablona: Šablon:Rešenje

Šablon:Vodič za Pajton 2.6/Navigation