2.1 Bütün faylın oxunması
Python-da mətn fayllarını oxumaq üçün bir neçə üsul var. Hər bir üsulun öz üstünlükləri var və müxtəlif vəziyyətlər üçün uyğundur. Mətn fayllarını oxumağın əsas yolları bunlardır: bütün məzmunu oxumaq, sətir-sətir oxumaq, simvolların miqdarını göstərək oxumaq və s.
read()
metodu faylın bütün məzmununu bir sətrə oxuyur.
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()
Bu faylı oxumağın çox sadə yoludur — metodu bir dəfə çağırırsınız və bütün fayl məzmunu sizin sətirinizdə olur. Lakin bu yanaşmanın da mənfi cəhətləri var — məsələn, fayl 200 MB loglardan ibarətdirsə, o zaman fayl yavaş oxunacaq və tətbiqinizin yaddaşı tez tükənəcək.
2.2 Faylın bütün sətirlərini oxumaq
read()
metoduna bir alternativ var — bu readlines()
metodu-dur. O da bütün faylı yaddaşa oxuyur, amma onu bir böyük string kimi yox, sətirlərin siyahısı formasında qaytarır — fayldakı hər sətir siyahının ayrı bir elementi olur.
readlines()
metodu faylın bütün sətirlərini oxuyur və onları string siyahısı kimi qaytarır.
file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
print(line.strip()) # strip() artiq boşluqları və yeni sətir simvollarını silir
file.close()
Bu yanaşma əlverişli ola bilər, əgər əvvəldən bilirsinizsə ki, faylın məzmununu sətir-sətir işləməyiniz lazımdır. Mənfi tərəfi — bu metod çox böyük fayllar üçün çox yaddaş istifadə edə bilər, çünki bütün sətirlər yaddaşa yüklənir.
2.3 Fayldakı sətirlərlə iterasiya
file
obyekti daxili iteratora malikdir, buna görə də onun məzmununu for
dövrü ilə keçmək mümkündür. Bu, faylı bütünlüklə yaddaşa yükləmədən, sətir-sətir oxumağa imkan yaradır.
Nümunə:
file = open('example.txt', 'r')
for line in file:
print(line.strip())
file.close()
Bu metod yaddaş baxımından daha effektivdir böyük fayllar üçün, çünki sətirlər bir-bir oxunur. Lakin, əvvəlki sətrə qayıtmaq və ya oxuma ardıcıllığını dəyişmək lazım olduqda istifadəsi çətin ola bilər.
Gəlin bu yanaşmanı əvvəlki ilə müqayisə edək:
Iterator istifadəsi | readlines() funksiyasının istifadəsi |
---|---|
|
|
Bu cür yanaşma daha sadə və tezdir. Amma real layihələrlə işləyərkən, bəzən bütün məlumatları dərhal yaddaşa yükləmək və orada işləmək daha sürətli olur.
readline()
və readlines()
metodları fayldan sətirləri oxumaq üçün istifadə olunur, lakin fərqli işləyirlər. readline()
hər dəfə bir sətir oxuyur, bu isə oxuma prosesinə nəzarət etməyə və faylın hamısını yaddaşa yükləməməyə imkan yaradır. Bu, faylları sətir-sətir işləmək və ya fayl bütövlükdə yaddaşa yükləmək üçün çox böyükdürsə, faydalıdır.
readlines()
, əksinə, faylın bütün sətirlərini dərhal oxuyur və onları list şəklində qaytarır. Bu metod faylın bütün sətirlərini tez əldə etmək və sonrakı işləmə üçün rahatdır. Lakin böyük fayllar üçün daha çox yaddaş istifadə edir, çünki bütün fayl bir anda yaddaşa yüklənir.
Tapşırığa görə readline()
yaddaşa qənaət etmək və oxuma prosesinə nəzarət etmək lazım olduğunda daha üstün olur, readlines()
isə işləmək üçün dərhal bütün faylın sətirlərini əldə etmək lazım olduqda rahatdır.
2.4 Faylın bir hissəsinin oxunması
Əgər fayl çox böyükdürsə, onu hissə-hissə oxuya bilərsiniz. read(n)
metoduna n
parametrini ötürə bilərsiniz - bu, oxunmalı olan simvolların sayıdır. Əgər faylda simvolların sayı n
-dən azdırsa, o zaman read()
metodu sadəcə faylı sonuna qədər oxuyacaq.
Nümunə:
file = open('example.txt', 'r')
content = file.read(10) # İlk 10 simvolu oxuyur
print(content)
file.close()
Bu, böyük faylları hissə-hissə oxumaq və ya sabit verilənlər bloklarını emal etmək üçün rahatdır. Lakin bu yanaşma faylı sətirlər üzrə bölməyi nəzərə almır - sətirlər ortadan kəsilə bilər.
2.5 Faylı sətr-sətr oxumaq
Əgər nəsə səbəbə görə iterator istifadə etmək istəmirsinizsə, faylı sətr-sətr əl ilə oxuya bilərsiniz. Bunun üçün file
obyektində readline()
metodu mövcuddur. readlines()
ilə qarışdırmayın.
readline()
metodu fayldan bir dəfəlik bir sətri oxuyur.
Nümunə:
file = open('example.txt', 'r')
line = file.readline()
while line:
print(line.strip())
line = file.readline()
file.close()
Bu nümunədə biz faylın məzmununu sətr-sətr oxuyuruq, oxunan sətir boş olmayana qədər.
GO TO FULL VERSION