Водич за Пајтон 2.6/Фајл
Овде је пример фајла УИ (унос/излаз):
# Док је фајл
излазни_фајл = open("тест.txt", "w")
излазни_фајл.write("Овај текст иде у излазни фајл\nПогледајте га и видите!")
излазни_фајл.close()
# Прочитајте фајл
унос_фајл = open("тест.txt", "r")
текст = унос_фајл.read()
унос_фајл.close()
print текст
Излаз и садржај датотеке тест.txt
су:
Овај текст иде у излазни фајл Погледајте га и видите!
Обратите пажњу да је написао фајл који се зове тест.txt
у директоријуму из ког се покреће програм. \n
у низу говори да Пајтон стави nнови ред где је то стављено.
Преглед фајла УИ је:
- Добијање објекта фајла помоћу
open
функције. - Читајте или пишите у објекту фајла (у зависности од тога како је отворено)
- Затворите га
Први корак је да добијете објекат фајла. Начин да ово урадите је да користите open
функцију. Формат је фајл_објекат = open(имефајла, режим)
где је фајл_објекат
променљива у коју се ставља објекат фајла, имефајла
је низ са именом фајла, и режим
је "r"
као рпрочитати фајл или "w"
као вписање у фајлу (и неколико других ћемо прескочити овде). Следеће су како се функције објекта фајла могу називати. Две најчешће функције су читање
и писање
. Функција читање
додаје низ на крају фајла. Функција читање
чита следећу ствар у фајлу и претвара је у низ. Ако није дат аргумент вратиће цео фајл (као што је урађено у примеру).
Овде је нова верзија програма бројева телефона који смо направили раније:
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 "Довиђења"
Обратите пажњу да сада обухвата чување и учитавање фајлова. Ово су неки излази када се два пута покрене:
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 Довиђења
Нови делови овог програма су:
def учитај_бројеви(бројеви, имефајла):
унос_фајл = open(имефајла, "r")
while True:
унос_фајл = унос_фајл.readline()
if not унос_фајл:
break
унос_фајл = унос_фајл[:-1]
име, број = унос_фајл.split(",")
бројеви[име] = број
унос_фајл.close()
def сачувај_бројеви(бројеви, имефајла):
излаз_фајл = open(имефајла, "w")
for x in бројеви.keys():
излаз_фајл.write(x + "," + бројеви[x] + "\n")
излаз_фајл.close()
Прво ћемо погледати део за чување програма. Прво ствара објекат фајла са командом open(имефајла, "w")
. Пролази затим кроз њега и ствара ред за сваки број телефона са командом излаз_фајл.write(x + "," + бројеви[x] + "\n")
. Ово пише линију која садржи име, зарез, број и прати га у нови ред.
Део учитавања је мало компликованији. Почиње узимањем објекта фајла. Затим користи while True:
петљу која наставља претраживање док не наиђе на break
изјаву. Затим узима линију линијом унос_линија = унос_фајл.readline()
. readline
функција ће вратити празан низ када се дође до краја фајла. if
изјава проверава за ово и break
ван while
петље када се то догоди. Наравно ако readline
није вратила нови ред на крају линије неће бити шансе да кажете ако је празан низ празан ред или крај овог фајла па је нови ред остао у чему readline
враћа. Стога морамо да се отарасимо нове линије. Линија унос_линија = унос_линија[:-1]
то ради за нас тако што испушта последњи знак. Следећа линија име, број = унос_линија.split(",")
дели линију на зарезом на име и број. Ово се затим додаје у бројевима
речника.
Вежбе
уредиСада мењајте програм оцене из секције Речници тако да користи датотеку УИ да води евиденцију о ученицима.
Откривена је петља шаблона: Шаблон:Решење