Лекция · 3.7

Файлдармен жұмыс

Программаң жұмысын тоқтатқанда, пернетақтадан енгізген барлық дерек жоғалып кетеді екенін байқадың ба? Ал ойын progресіңді сақтау немесе үлкен көлемдегі деректі бір рет жазып, талай рет қайта пайдалану керек болса ше? Дәл осы үшін файлдармен жұмыс істеу керек. Бүгін Python-да файлды ашу, оқу, жазу және дұрыс жабудың жолын үйренеміз.

Файлды ашу және жабу

Python-да файлдың екі түрі бар: мәтіндік файл (жолдарға бөлінген мәтін) және екілік файл (сурет, дыбыс — кез келген форматтағы деректер). Файлмен жұмыс әрдайым үш кезеңнен тұрады: ашу → жұмыс істеу → жабу.

Функция
open(атауы, режим) — файлды ашады. Негізгі режимдер: 'r' — оқу (әдепкі), 'w' — жазу (файл мазмұны ТАЗАЛАНАДЫ), 'a' — соңына қосу (append).
fin = open('file1.txt', 'r')
fout = open('file2.txt', 'w')
fapp = open('file3.txt', 'a')

# Жұмыс аяқталған соң жабу міндетті:
fin.close()
fout.close()
🥪
«Сэндвич» қағидасы: файлды ашу — нан, онымен жұмыс істеу — толтырма, файлды жабу — екінші нан. Әрбір АШЫЛҒАН файл сөзсіз ЖАБЫЛУЫ керек, әйтпесе жады бос орнын жоғалтады немесе деректер сақталмай қалуы мүмкін.

Файл объектісінің өз атрибуттары бар: file.name (аты), file.mode (ашылу режимі), file.closed (жабық болса True).

Файлдан оқу

Файлдан оқудың үш негізгі әдісі бар — олардың айырмашылығы, қанша оқитынында:

ӘдісНе оқиды
read()Барлық мазмұнды бір реттен (немесе read(n) — n символ/байт)
readline()ТЕК бір жолды
readlines()Барлық жолдарды тізім түрінде
⚠️
Ескеру: файл соңына жеткенде read() пен readline() БОС ЖОЛ қайтарады — бұл файлдың аяқталғанын тексеру үшін қолданылады.

Файл объектісі итерацияланатын (циклмен өтуге болатын) объект болғандықтан, оны тікелей циклде де оқуға болады:

for i in open('text.txt'):
    print(i)

Оқылған жолды бөліктерге бөлу керек болса, таныс split() әдісі көмекке келеді: my_file.readline().split()['one', '-', '1', '-', 'I'].

with операторы — қауіпсіз жол

Файлды ашып, кейін жабуды ҰМЫТЫП КЕТУ — жиі кездесетін қате. Мұны болдырмайтын арнайы конструкция бар:

Оператор
with — файлды автоматты түрде ашады және блок аяқталған соң ӨЗІ жабады, қолмен close() шақырудың қажеті жоқ.
with open('text.txt') as my_file:
    for line in my_file:
        print(line)
Есеп (орта): файлдағы сөздер санын анықтау

Берілді: data.txt мәтіндік файлы.

with open('data.txt') as file:
    text = file.read()
    text = text.replace(".", "").replace(",", "")
    words = text.split()
    print(len(words))

Түсіндірме: replace() тыныс белгілерін жояды (сөздер тек бос орынмен ажыратылатындай), содан кейін split() мәтінді сөздерге бөледі, len() санын береді.

Файлға жазу және қатені тексеру
Әдіс
write() — файлға жазады, жазылған символдар санын қайтарады. write() жол соңына '\n' ҚОСПАЙДЫ — жаңа жолға өтуді өзің жазуың керек.
Есеп (орта): екі санның қосындысын файлға жазу

Берілді: input.txt файлында a=5, b=6 сандары бөлек жолда.

f = open('input.txt', "r")
a = int(f.readline())
b = int(f.readline())
h = open('output.txt', "w")
h.write(str(a + b))
f.close()
h.close()

Жауабы: output.txt файлында — 11.

Ал файлдық операциялар (ашу, оқу) — қателердің ықтимал көзі (файл табылмауы, диск толуы). Сенімді программа мұны try/except арқылы тексереді:

Есеп (қиын): файлдан сандарды оқып қосу, қатені тексеріп

Берілді: file.txt файлында бос орынмен ажыратылған нақты сандар бір жолда.

s = 0
try:
    with open('file.txt') as my_file:
        numbers = my_file.readline().split()
        for i in numbers:
            s += float(i)
        print('sum=%.2f' % s)
except:
    print('Error opening file')

Жауабы: файлда 0.95 0.47 0.67 болса — sum=2.09.

🎯 ҰБТ байланысы
Файлдық операциялардың дұрыс ретін (ашу→жұмыс→жабу) және режимдерді білу маңызды.
1
'w' режимі файл мазмұнын ТАЗАЛАЙДЫ, 'a' режимі СОҢЫНА қосады — шатастырмау.
2
write() жаңа жол таңбасын автоматты қоспайды.
3
with қолданғанда файлды қолмен жабудың қажеті жоқ — ол автоматты орындалады.
Сабақ қорытындысы
  • Файлмен жұмыс: ашу (open()) → жұмыс істеу → жабу (close()).
  • Режимдер: 'r' (оқу), 'w' (жазу, тазалап), 'a' (соңына қосу).
  • read(), readline(), readlines() — оқу әдістері; write() — жазу әдісі.
  • with операторы файлды автоматты жабады; try/except файлдық қателерден қорғайды.