• Savolingiz bormi?
  • +998 97 534 03 20
  • turayev.ruziboy@bk.ru
 15. PYTHONDA FAYLLAR BILAN ISHLASH

15. PYTHONDA FAYLLAR BILAN ISHLASH

Python / 2021-12-19

Kompyuterimizda aksar ma'lumotlar fayl ko'rinishida saqlanadi. Bu xoh matn bo'lsin, xoh jadval, xoh rasm, xoh video. Fayllarda turli ma'lumotlar saqlanishi mumkin, ob-havo ma'lumotlari, yillik hisobotlar, mijozlarning telefon raqamlari, talabalarning baholari va hokazo.

Ko'pgina holatlarda dastur davomida katta ma'lumotlarni aynan fayllardan o'qib olish talab qilinadi. Ayniqsa, tahliliy dasturlarda fayl ko'rinishida saqlangan, katta hajmdagi jadvallar bilan ishlash tabiiy. Lekin fayllar bilan ishlash boshqa holatlarda ham ko'p asqotadi, misol uchun oddiy matnni html ko'rinishga o'tkazishni avtomatlashtiruvchi dastur yozishda.

Fayllar bilan ishlashning birinchi qadami bu fayldagi ma'lumotlarni kompyuter xotirasiga ko'chirish. Buning bir necha usuli bor, quyida ular bilan tanishamiz.

 

Boshlanishiga bizga fayl kerak. Keling, yangi fayl.txt faylini yaratamiz va ichiga quyidagi matnni joylaymiz:

 

Salom

12457893

9874563321

 

Fayli to'lqi o'qish uchun quyidagi kodni yozamiz:

Kodni tahlil qilamiz:

  • Birinchi qatorda open() funksiyasi yordamida faylni ochayapmiz. Bunda funksiyaga argument sifatida fayl nomini berayapmiz. Bu yerda biz ochayotgan fayl va dasturimiz bir papkada bo'lishi muhim.
  • open() funksiyasi faylni obyekt sifatida qaytaradi, as operatori yordamida esa biz obyektimizga fayl deb nom berayapmiz.
  • Ikkinchi qatorda .read() metodi yordamida fayl obyektining tarkibidan bizga kerakli matnni olib, yangi, fayl_malum o'zgaruvchisiga yuklayabmiz.
  • with operatorining vazifasi biz fayl bilan ishlab bo'lganimizdan so'ng faylni yopish. Yuqoridagi misolda, 2-qatordan so'ng Python zudlik bilan faylni yopadi.
  • Shuning uchun open() funksiyasiga with orqali murojat qilganimizda, faylimiz with blokining oxirigacha ochiq turadi, va with tugashi bilan, fayl ham yopiladi. Demak fayl ustidagi amallarni biz with bloki ichida bajarib olishimiz kerak.

Keling endi pi ning qiymatini konsilga chiqaramiz:

Matn faylda qanday saqlangan bo'lsa, huddi shu ko'rinishda konsolga chiqdi.

Fayl ma’lumotlarini quyidagicha songa o’zgartiramiz.

5658996452232323

12457893

9874563321

 

Saqlangan ma'lumot son bo'lsada, fayldan o'qiganimizda qaytgan qiymat matn ko'rinishida bo'ladi. Matnni songa o'tkazish uchun, unga biroz ishlov beramiz:

Natija: 5.658996452232323e+33

.replace() metodi matn tarkibidagi biror harf yoki belgini boshqa harf yoki belgi bilan almashtirish uchun ishlatiladi.

 

FAYLNI QATORMA-QATOR OʻQISH

Baʻzida faylni toʻliqligicha emas, qatorma-qator oʻqish talab qilinishi mumkin. Masalan, faylda talabalrning ismi yoki kundalik ob-havo maʻlumotlari saqlangdanda va hokazo. Bunday hollarda for tsiklidan foydalanamiz:

 

5658996452232323

12457893

9874563321

 

Qatorlarni ro'yxat ko'rinishida saqlab olish uchun, .readlines() metodidan foydalanamiz.

['Aliyev Ahmad\n', 'Soliyev Aziz\n', 'Tojiyev Akbar\n']

E'tibor bering, har bir talaba ismidan so'ng qator tashlah belgisi (\n) tushib qolgan. Biz bu belgilarni .rstrip() metodi yordamida olib tashlashimiz mumkin:

['Aliyev Ahmad', 'Soliyev Aziz', 'Tojiyev Akbar']

 

FAYLGA YOZISH

Ma'lumotlarni saqlashning eng qulay usuli bu faylga yozish. Dasturimiz bajarilishdan to'xtaganidan so'ng, xotiradagi ma'lumotlar o'chib ketishi mumkin, lekin faylga yozilgan ma'lumotlar saqlanib turaveradi. Fayllarni kelajakda qaytdan xotiraga yuklab, dasturimizni to'htagan joyidan davom etishimiz mumkin.

Yuqorida biz faylni ochishda open() funksiyasidan foydalandik, va yagona argument sifatida fayl nomini berdik. Bunda fayl faqatgina o'qish uchun ochiladi, unga yozib bo'lmaydi. Faylga ma'lumot yozish uchun open() funksiyasiga murojat qilishda fayl nomidan tashqari yana bir argument beramiz. Ikkinchi argument faylni aynan nima maqsadda ochishimizni bildiradi. Argumentlar quyidagilardan iborat bo'lishi mumkin:

 

Argument

Qoʻllanilishi

Mazmuni

'w'

open('file.txt','w')

Faylni yozish uchun ochish. Fayl mavjud bo'lmasa yangi fayl yaratiladi. Fayl mavjud bo'lsa tarkibi o'chib ketadi

'r'

open('file.txt','r')

Faylni faqat o'qish uchun ochish (yozib bo'lmaydi)

'w+'

open('file.txt','w+')

Faylni o'qish va yozish uchun ochish. Fayl mavjud bo'lmasa yangi fayl yaratiladi. Fayl mavjud bo'lsa tarkibi o'chib ketadi.

'r+'

open('file.txt','r+')

Faylni o'qish va yozish uchun ochish.

'a'

open('file.txt','a')

Faylga ma'lumot qo'shish uchun ochish. Fayl mavjud bo'lmasa yangi fayl yaratiladi.

'a+'

open('file.txt','a+')

Faylga ma'lumot qo'shish va o'qish uchun yozish. Fayl mavjud bo'lmasa yangi fayl yaratiladi.

 

YANGI FAYLGA YOZISH

Yangi faylga ma'lumot yozish uchun open() funksiyasini chaqirishda 'w' (write) argumentidan foydalanamiz. Ochilgan faylga ma'lumot qo'shish uchun esa .write() metodini chaqiramiz.

Faylga yozayotgan ma'lumotlarimiz matn ko'rinishida bo'lishi kerak. Aks holda dasturimiz xato beradi.

TypeError: write() argument must be str, not int

Xatoning oldini olish uchun sonlarni avval str() funksiyasi yordamida matnga keltirib olamiz.

Faylda saqlangan ma'lumotlar

Afsuski, faylga bir nechta ma'lumot yozganimizda, ma'lumotlar alohida qatordan emas, bir qatorda bir-biriga qo'shib qo'shib yoziladi.

Buning oldini olishimiz uchun matn so'ngida \n belgisini qo'shib ketishimiz kerak bo'ladi:

Fayldagi ma'lumotlar yangi qatordan saqlandi

 FAYLGA MA'LUMOT QO'SHISH

Agar mavjud faylga ma'lumot qo'shish talab qilinsa, open() funksiyasiga murojat qilishda 'a' (append) argumentidan foydalanamiz. Bunda yangi qo'shilgan ma'lumotlar faylning oxiriga qo'shiladi.

Faylga yangi ma'lumotlar qo'shildi

Agar biz ochayotgan fayl mavjud bo'lmasa, Python yangi fayl yaratadi.

O'zgaruvchilarni faylda saqlash

Yuqorida biz ma'lumotlarni matn ko'rinishida saqlashni ko'rdik. Agar dastur davomida turli o'zgaruvchilarni faylda saqlash talab qilinsa pickle modulidan foydalanamiz. Pickle ma'lumotlarni biz qanday ko'rinishda bersak, shunday ko'rinishda faylga yozadi. Yuqoridagi usuldan farqli ravishda, pickle yordamida yozilgan fayllarning tarkibini Pythondan tashqarida ko'rib bo'lmaydi.

Pickle faylga yozish

Pickle dan foydalanish uchun biz avval bu modilni import qilamiz. Faylno ochishda esa, open() funksiyasiga ikkinchi argument sifatida 'wb' (write binary) beramiz, ya'ni ikkilik sanoq tizimida yozishni ko'rsatamiz. Faylga yozish uchun esa pickle.dump() metodidan foydalanamiz:

E'tibor bering, yuqorida fayl nomini yozishda uning turini ko'rsatmadik, sababi, avval aytganimizdek bu fayllar Pythondan tashqarida ochilmaydi va biz buning oldini olishimiz kerak. Aslida fayl nomiga .txt qo'shimchasini ham qo'shishimiz mumkin, bu bilan dastur xato ishlamaydi, lekin bu bizni kelajakda chalg'itishi mumkin. Istasangiz faylga .dat (data so'zidan olingan) qo'shimchasini qo'shib qo'yishingiz mumkin (info.dat).

PICKLE FAYLDAN O'QISH

Pickle fayldan o'qish uchun open() funksiyasini 'rb' (read binary) argumenti bilan chaqiramiz. O'zgaruvchilarni bitta faylga yozganimizda, har bir o'zgaruvchi alohida qatordan yoziladi. Fayldan o'qishda ham har bir qatorni alohida o'qishimiz kerak bo'ladi:

{'ism': 'hasan', 'familiya': 'husanov', 'tyil': 2003, 'kurs': 2}

{'ism': 'alijon', 'familiya': 'valiyev', 'tyil': 2004, 'kurs': 1}

Adashib ketmaslik uchun, alohida o'zgaruvchilarni alohida fayllarga saqlash tavsiya qilinadi.

Mustaqil yechish uchun topshiriqlar

Masala 1. Magazinda talabi yuqori bo`lgan  mahsulotlarni xarid qilish uchun xaridorlarning  ro`yxati RR.txt faylida keltirilgan. Ro`yxat tartib raqam, F.I.SH.,  xaridorning uy manzili va mahsulotlarning olinishi  kerak bo`lgan sana bilan  to`ldirilgan. Ushbu ro`yxatni alfavit tartibida RRR1.txt fayliga yozing.

Masala 2. YOtoqxonadan joy olish uchun talabalar ro`yxati RT.txt faylida tuzilgan. Ushbu ro`yxatga talabaning  F.I.SH, guruhi, o`rtacha o`zlashtirish bali, oila byudjeti  taqsimoti kiritilgan. YOtoqxonadan joyni birinchi  o`rinda kam ta`minlangan, ya`ni  ikkita eng kam  ish haqi oluvchi oila a`zolariga, keyin qolganlarga  o`zlashtirish  ballari kamayib borish  tartibida joy ajratiladi. YOtoqxonada joy bilan taqsimlanish ro`yxatini tartib  bilan  ekranga chiqaring.

Masala 3. Avtovokzalning avtobuslar  harakatlanish jadvali AT.txt faylida saqlanadi. Har bir reys uchun  avtobus davlat raqami, masofa (km), avtobus rusumi,  yo`nalishi,  jo`nash va qaytish vaqti ko`rsatilgan. AATT.txt fayliga yo`nalishlarni masofaga nisbatan orta (kamaya) borish  tartibida joylashtiring.

Masala 4. SHaharlararo ATSda telefondan foydalanganlik haqida ma`lumotlar saqlanadi. Bu ma`lumotlarda  gaplashilgan kun, shahar  nomi  va kodi, gaplashish vaqti, tarif, telefon raqami shu shahardagi va abonent raqami ko`rsatilgan. Har bir shahar uchun umumiy gaplashilgan vaqt va summasini chiqaring.

Masala 5. Sport musobaqalari haqidagi ma`lumotlarda׃ shahar nomi, jamoa nomi, har bir ishtirokchining F.I.SH, sportchi raqami, yoshi, bo`yi, vazni ko`rsatilgan.  Berilgan yoshdan kichik musobaqa ishtirokchilari haqida  ma`lumot chiqaring.

Masala 6.  ״Shohruh״ firmasida ishlaydiganlar ro`yxati keltirilgan.  Ro`yxat  jadval ko`rinishida berilgan.  Jadvalda har bir ishchining  tabel nomeri  F.I.SH., ishga qabul qilingan yili, yoshi,  manzili, joriy yil ko`rsatilgan. 25 yildan ortiq ishlagan ishchilar ro`yxatini AA.txt fayliga yozing.

Masala 7. Kutubxonada saqlanayotgan kitoblar haqida quyidagi ma`lumotlar berilgan: kitobning registrasiya raqami, nashriyoti, betlar soni, muallif. Kutubxonadagi kitoblarning mualliflarning familiyalarini alfavit tartibida joylashtirib,  ro`yxatini chiqaring.

Masala 8. Fakul`tet talabalari ro`yxati berilgan. Ro`yxatda׃ talabalarning F.I.SH, o`qishga qabul qilingan yili, jinsi, qaerda tug`ilgani, guruhi, to`plagan balli, hozirda yashayotgan manzili, talabaning nima asosida ( davlat to`lovi yoki pulli-shartnoma) asosida tahsil olishi  haqida ma`lumot berilgan.  Fakul`tetda pulli-shartnoma asosida o`qib turgan talabalar ro`yxatini chiqaring.

Masala 9. x -o`zgaruvchining 10 ta qiymati AA.txt faylida keltirilgan. Y=sin2x  funksiyaning mos qiymatlarini AAS.txt fayliga yozish dasturini tuzing.

Masala 10 . Tashkilot ishchilari quyidagi ma`lumotlarga ega׃  F.I.SH, bo`lim raqami, mansabi, ishga qabul qilingan yili.  Har bir bo`lim bo`yicha eng ko`p ishlagan ishchining ro`yxatini chiqaring.

Masala 11. Universitetga kirish imtihonlarida abiturientlarning to`plagan ballari haqida ma`lumotlar ro`yxatida׃ F.I.SH, manzili, to`plagan ballari ko`rsatilgan. Ushbu ro`yxatdan foydalanib eng yuqori  ball  to`plagan talabalarning 45 tasini  alfavit tartibida joylashtiring.      

Masala 12. Aeroportning ma`lumotlar saqlanish joyida samolyotlarning keyingi kunlarda uchish jadvali saqlanadi.  Har bir reysda:  reys raqami, samolyotning turi,  belgilangan joyi,  uchish vaqti berilgan.  Barcha reyslar raqamlarini,  samolyot turlarini va  belgilangan joyga uchish  vaqtlarini o`sish tartibida chiqaring.

Masala 13. Radioatel`eda ta`mirlashga topshirilgan radioapparatlarning kvitansiyalari saqlanadi. Har bir kvitansiya quyidagi ma`lumotni o`z ichiga saqlaydi. Topshirilgan yaroqsiz apparatning nomi (televizor, radio…) Apparatning markasi, remontga topshirilgan sanasi, ta`mirlash narxi, buyurtmaning ahvoli (bajarilgan, bajarilmagan). Topshirilgan buyumlarning ahvoli to`g`risidagi ma`lumotni alohida faylda saqlovchi dastur tuzing.

Masala 14. Ko`rik tanlovda ishtirok etuvchi ijrochilar  haqida quyidagi  ma`lumotlar berilgan F.I.SH., tug`ilgan yili, davlatning nomi, musiqa asbobining nomi ( gitara, skripka, pianino ) egallagan o`rinlari, yoshi. Sahnaga chiqish tartibini yoshiga nisbatan (o`sib borish tartibida) aniqlovchi dastur yordamida ro`yxat yarating.

 

 


Izoh qoldirish