2.4 Файлдармен жұмыс
Python әр түрлі файл түрлерін қолдайды, бірақ шартты түрде оларды екі
түрге бөлуге болады: мәтін және екілік.
Мәтіндік файлдарға мысалы, cvs, txt,
html, кеңейтімі бар файлдар жатады. Жалпы мәтіндік пішінде ақпаратты
сақтайтын кез келген файлдар.
Бинарлық файлдар - суреттер, аудио және бейне
файлдар және т.б. Файл түріне байланысты онымен жұмыс істеу сәл өзгеше
болуы мүмкін.
41
Файлдармен жұмыс істеу кезінде сіз белгілі бір операциялардың
кезектілігін қадағалауыңыз керек:
- Open() әдісімен файлды ашу
- Read() әдісін пайдаланып файлды оқу немесе write () әдісін қолданып
файлға жазу
- Close() әдісі арқылы файлды жабыңыз
Файлмен жұмыс істеуді бастау үшін келесі ресми анықтамасы бар open ()
функциясы арқылы ашылуы керек:
open(file, mode)
Функцияның бірінші параметрі файлға жол ұсынады, мысалы
C: //somedir/somefile.txt.
Немесе сіз салыстырмалы болуы мүмкін, мысалы, somedir / somefile.txt -
бұл жағдайда, файл жұмыс істейтін Python сценарийінің орнын іздейді.
Екінші аргумент - бұл режим файлды ашуға арналған режимді, немен
айналысатынымызға байланысты. 4 жалпы режим бар:
- r (оқу). Файл оқу үшін ашылады. Егер файл табылмаса, онда
FileNotFoundError лақтырылады.
- w (Жазу). Файл жазу үшін ашылды. Егер файл жоқ болса, ол жасалады.
Егер мұндай файл бұрыннан бар болса, ол қайтадан жасалады, және, тиісінше,
ескі деректер жойылады.
- a (Қосу). Файл қайта жазу үшін ашылады. Егер файл жоқ болса, ол
жасалады. Егер мұндай файл бұрыннан бар болса, деректер аяқталғанға дейін
жазылады.
- b (екілік). Екілік файлдармен жұмыс істеу үшін пайдаланылады. Басқа
режимдермен бірге пайдаланылады - w немесе r.
Файлмен жұмыс істеуді аяқтағаннан кейін close() әдісімен жабуыңыз
керек. Бұл әдіс файлмен байланысты барлық ресурстарды босатады.
Файлды
ашқан кезде немесе онымен жұмыс істеу кезінде әртүрлі жағдайларды
кездестіруіміз мүмкін, мысалы, оған рұқсат жоқ және т.б. Бұл жағдайда
бағдарлама қатеге түседі және сәйкесінше файл жабық болмайды.
Кодта бұл келесідей:
Fin = open ( "hello world" сөз тіркесінinput.txt"hello world" сөз тіркесін )
Fout = open ( "hello world" сөз тіркесінoutput.txt"hello world" сөз тіркесін, "hello world" сөз тіркесінw"hello world" сөз тіркесін )
Fout.close()
Fin.close()
Мәтіндік файлға жазу. Жазу үшін мәтіндік файлды ашу үшін, w (қайта
жазу) немесе (қайта жазу) режимін қолдану керек. Содан кейін жазуға арналған
жазу (str) әдісі пайдаланылады, оған жазылған жол беріледі. Айта кету керек,
бұл жазылған жол, сондықтан сізге сандарды, басқа түрдегі деректерді жазу
қажет болса, оларды алдымен жолға түрлендіру керек.
Файлды оқу үшін ол r (Оқу) режимі арқылы ашылады, содан кейін оның
мазмұнын түрлі әдістермен оқуға болады:
- readline (): файлдан бір жолды оқиды
- read (): файлдың бүкіл мазмұнын бір жолда оқиды
42
- readlines (): файлдың барлық жолдарын тізімге оқиды
Әр жолды оқуға readline() әдісін пайдаланбайтынымызға қарамастан,
бірақ файлды іздегенде, бұл әдіс әр жаңа жолды алу үшін автоматты түрде
шақырылады.
str1 = Fin.readline()
# str1 = 1
str2 = Fin.readline()
# str2 = 2
Мысал: Файлда екі сан жазылған.
input файлы.txt:12 17
жауабы: 27
1.
тәсіл: Int функциясы жол мәнін санға түрлендіреді
Fin = open ( "hello world" сөз тіркесінD:/input.txt"hello world" сөз тіркесін )
str = Fin.readline().split()
x, y = int(str[0]), int(str[1])
print(x+y)
2. тәсіл:
...
x, y = [int(i) for i in s]
print(x+y)
Python write әдісі файлға жолды жазу үшін қолданылады:
Fout = open ( "hello world" сөз тіркесінD:/out.txt"hello world" сөз тіркесін,"hello world" сөз тіркесінw"hello world" сөз тіркесін )
Fout.write ("hello world" сөз тіркесінhello"hello world" сөз тіркесін)
Файлға жазуды белгілі бір пайдалану арқылы жүзеге асыруға болады. Бұл жағдайда {:d}
үлгілерінің орнына format (алдымен x, содан кейін y, одан кейін x+y) әдісінің
параметрлерінің мәндері дәйекті түрде қойылады.
Fout.write ( "hello world" сөз тіркесін{:d} + {:d} = {:d}\n"hello world" сөз тіркесін.format(x, y, x+y) )
EOF (файл соңы болса) while циклін тәсілі тізімге жолдарды қосу:
while True:
str = Fin.readline()
if not str: break
Fin = open ( "hello world" сөз тіркесінinput.txt"hello world" сөз тіркесін )
lst = Fin.readlines()
for str in lst:
print ( str, end = "hello world" сөз тіркесін"hello world" сөз тіркесін )
Fin.close()
Python үшін қолайлы әдіс:
for str in open ( "hello world" сөз тіркесінinput.txt"hello world" сөз тіркесін ):
print ( str, end = "hello world" сөз тіркесін"hello world" сөз тіркесін )
43
Ақпаратты ыңғайлы пішімде сақтайтын жалпы файл пішімдерінің бірі csv
пішімі. Csv файлындағы әрбір жолда үтірмен бөлінген бөлек бағандардан
тұратын бөлек жазба немесе жол көрсетіледі. Осылайша, формат «үтірмен
бөлінген мәндер» деп аталады. Csv пішімі мәтіндік файл пішімі болса да,
Python онымен жұмыс істеуді жеңілдету үшін арнайы орнатылған csv модулін
ұсынады.
Файлға екі өлшемді тізім жазылады - шын мәнінде, әр жол бір
пайдаланушы болып табылатын кесте. Әр пайдаланушыда екі өріс бар: аты мен
жас. Яғни, шын мәнінде, үш жолдың және екі бағанның кестесі.
Файл жазу үшін ашылған кезде, үшінші параметр newline = «» мәнін
анықтайды - бос жол операциялық жүйеге қарамастан, файлдан сызықтарды
дұрыс оқуға мүмкіндік береді.
Жазу үшін csv.writer(file) функциясымен қайтарылатын жазушы
объектісін алу керек. Бұл функцияға ашық файл беріледі. Және нақты жазба
writer.writerows әдісі арқылы жасалады (пайдаланушылар) Бұл әдіс жолдардың
жиынтығын алады. Біздің жағдайда бұл екі өлшемді тізім.
Егер сізге бір өлшемді тізімді қосу қажет болса, мысалы, [«Sam», 31],
онда бұл жағдайда writer.writerow(user) әдісін шақыруға болады
Жоғарыда келтірілген мысалда әр жазба немесе жол жеке тізім, мысалы,
[«Sam», 31]. Сонымен қатар, csv модулінде сөздіктермен жұмыс істеу үшін
арнайы қосымша мүмкіндіктер бар. Атап айтқанда, csv.DictWriter() функциясы
файлға жазуға мүмкіндік беретін жазушы нысанын қайтарады. Csv.DictReader()
функциясы файлдан оқу үшін оқу құралының нысанын қайтарады. Мысалы:
import csv
FILENAME = "users.csv"
users = [
{"name": "Tom", "age": 28},
{"name": "Alice", "age": 23},
{"name": "Bob", "age": 34} ]
with open(FILENAME, "w", newline="") as file:
columns = ["name", "age"]
writer = csv.DictWriter(file, fieldnames=columns)
writer.writeheader()
writer.writerows(users)
user = {"name" : "Sam", "age": 41}
writer.writerow(user)
with open(FILENAME, "r", newline="") as file:
reader = csv.DictReader(file)
for row in reader:
print(row["name"], "-", row["age"])
Жолдар writeerow() және writerows() әдістерімен жазылады. Бірақ енді әр
жол жеке сөздік болып табылады, сонымен қатар, баған тақырыптары
writeheader() әдісі арқылы жазылады және бағандар жиынтығы csv.DictWriter
әдісіне екінші параметр ретінде беріледі.
44
Екілік файлдар, мәтіндік файлдардан өзгеше, ақпаратты байт жиынтығы
түрінде сақтайды. Python-мен олармен жұмыс істеу үшін сізде кіріктірме
қондырылған модуль қажет. Бұл модуль екі әдісті ұсынады:
- dump (obj, file): obj екілік файлға жазады
- load(file): екілік файлдан деректерді нысанға оқиды
import pickle
FILENAME = "user.dat"
name = "Tom"
age = 19
with open(FILENAME, "wb") as file:
pickle.dump(name, file)
pickle.dump(age, file)
with open(FILENAME, "rb") as file:
name = pickle.load(file)
age = pickle.load(file)
print("Имя:", name, "\tВозраст:", age
)
Мысалы, 1 ден 9 ға дейін жазу
for
i
in
range
(
10
) цикл арқылы жүзеге асады
Келесі біздің қарастыратынымыз сандардың аралары бос орын болғанын
қаласаңыз fout.write(str(i)+' '
) осыны қолдануға болады
fout=
open
(
'output.txt'
,
'w'
)
for
i
in
range
(
10
):
fout.write(
str
(i)+
' '
)
fout.close()
Форматтау арқылы қолдану
fout=
open
(
'output.txt'
,
'w'
)
s=
'a'
for
i
in
range
(
10
):
print
(
'%s= %d'
% (s,i))
s=s +
'a'
fout.write(s)
fout.close()
45
|