Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

Bu bo'limda dastur tashqi dunyo bilan ishlay boshladi: fayllarga yozish va o'qish, pickle hamda JSON formatlari, xatolarni try-except bilan boshqarish.

Fayl ochish: with open(...)

Dastur to'xtashi bilan o'zgaruvchilardagi hamma narsa yo'qoladi; saqlanishi kerak bo'lgan ma'lumot faylga yoziladi:

with open("kundalik.txt", "w") as f:
    f.write("Bugun fayllar mavzusi\n")
    f.write("Ertaga testlash\n")

with open("kundalik.txt") as f:
    matn = f.read()
print(matn)

Natija:

Bugun fayllar mavzusi
Ertaga testlash
  • with bloki tugashi bilan fayl avtomatik yopiladi — xato chiqsa ham. open()ni har doim with bilan ishlating.
  • \n — yangi qator belgisi; write uni o'zi qo'ymaydi.
  • Katta faylni qatorma-qator o'qish xotirani tejaydi:
with open("kundalik.txt") as f:
    for qator in f:
        print("->", qator.strip())    # strip() chetki \n ni olib tashlaydi

Natija:

-> Bugun fayllar mavzusi
-> Ertaga testlash

Rejimlar:

Rejim Ma'nosi Eski mazmun Fayl yo'q bo'lsa
r O'qish (standart) O'zgarmaydi FileNotFoundError
w Yozish O'chadi! Yaratiladi
a Oxiriga qo'shish Saqlanadi Yaratiladi

Tipik xato — jurnalga qo'shmoqchi bo'lib w ochish: har ishga tushirishda fayl bo'shab qoladi. Qo'shish uchun — a.

pickle — Python obyektini saqlash

pickle istalgan Python obyektini (ro'yxat, lug'at, klass obyekti) faylga "muzlatadi" va keyin aynan qaytaradi:

import pickle

talabalar = [{"ism": "Ali", "ball": 85}, {"ism": "Vali", "ball": 92}]

with open("data.pkl", "wb") as f:     # b — binar rejim, pickle uchun shart
    pickle.dump(talabalar, f)

with open("data.pkl", "rb") as f:
    qayta = pickle.load(f)
print(qayta[1]["ism"])

Natija:

Vali

Juftlikni yodda tuting: dump — yozish, load — o'qish; rejimlar wb/rb (binar).

JSON — universal almashinuv formati

JSON ko'rinishi Python lug'atiga deyarli bir xil, lekin matnli va universal: uni JavaScript ham, server ham, istalgan dastur ham o'qiydi. Internetdagi API'larning mutlaq ko'pchiligi JSON'da gaplashadi:

import json

sozlamalar = {"til": "uz", "tungi_rejim": True, "shrift": 14}

with open("config.json", "w") as f:
    json.dump(sozlamalar, f)

with open("config.json") as f:
    yuklandi = json.load(f)
print(yuklandi["til"], yuklandi["shrift"])

Natija:

uz 14
pickle json
Format Binar (odam o'qiy olmaydi) Matn (ochib ko'rsa bo'ladi)
Kim o'qiydi Faqat Python Istalgan til/dastur
Nima saqlaydi Deyarli istalgan obyekt Lug'at, ro'yxat, son, matn, bool
Qachon Ichki, vaqtinchalik saqlash Almashish, sozlamalar, API

Qoida: tashqariga chiqadigan yoki odam o'qishi mumkin bo'lgan ma'lumot — JSON; faqat o'z dasturingiz ichida aylanadigan murakkab obyekt — pickle.

try-except — xatolarni boshqarish

Lirik chekinishda xatolarni o'qishni o'rgangan edik; endi ularni ushlaymiz. Ishonchsiz amal tryga o'raladi; xato chiqsa dastur yiqilmaydi — except bloki ishlaydi:

try:
    son = int(input("Son kiriting: "))
except ValueError:
    print("Bu son emas!")
else:
    print("Qabul qilindi:", son)     # faqat xato bo'lmaganda
finally:
    print("Dastur davom etadi")      # har doim

Foydalanuvchi "abc" kiritganda Natija:

Bu son emas!
Dastur davom etadi

To'rt blokning vazifasi: try — xavfli kod; except — xato ushlanganda; else — xato bo'lmaganda; finally — har qanday holatda (masalan, yakunlash ishlari).

Fayl bilan klassik qolip:

try:
    with open("yoq_fayl.txt") as f:
        matn = f.read()
except FileNotFoundError:
    print("Fayl topilmadi — yangisini yaratamiz")

Natija:

Fayl topilmadi — yangisini yaratamiz

Ikki qoida:

  1. Aniq xato turini ushlang: except ValueError: — yaxshi; yalang'och except: — yomon, chunki u kodingizdagi haqiqiy xatolarni ham yashiradi.
  2. try blokini imkon qadar qisqa tuting — faqat xavfli qatorlar ichida bo'lsin; aks holda qaysi amal xato berganini bilish qiyinlashadi.

Va "Son topish" o'yinidagi himoyaning try-except versiyasi — while bilan birga:

while True:
    try:
        yosh = int(input("Yoshingiz: "))
        break
    except ValueError:
        print("Raqam kiriting")

Eslab qoling

  • with open(...) — fayl avtomatik yopiladi; rejimlar: r o'qish, w o'chirib yozish, a qo'shish.
  • \n — yangi qator; qatorma-qator o'qish — for qator in f.
  • pickle: dump/load, wb/rb, faqat Python. JSON: matnli, universal, API'lar tili.
  • try/except/else/finally; aniq xato turini ushlang; try qisqa bo'lsin.
  • Kiritish himoyasi qolipi: while True + try + break.

Amaliyot

  1. "Rejalar" faylini w bilan uch qator qilib yozing; a bilan yana ikkitasini qo'shing; qatorma-qator raqamlab o'qing.
  2. Talabalar lug'atlar ro'yxatini pickle bilan saqlab, qayta yuklang va asl bilan tengligini == orqali tekshiring.
  3. O'sha ro'yxatni JSON'ga yozing; faylni matn muharririda ochib, pickle faylidan farqini ko'ring.
  4. Foydalanuvchidan yoshini so'rang: while True + try-except bilan to'g'ri son kiritilguncha qayta so'ralsin; 0 dan kichik qiymatga ham chek qo'ying.
  5. Mavjud bo'lmagan faylni ochishda FileNotFoundError ushlab, o'rniga bo'sh fayl yaratadigan kod yozing.
  6. (Qo'shimcha) Kichik "eslatmalar" dasturi: har ishga tushganda eski eslatmalarni JSON'dan yuklaydi, yangisini so'raydi, chiqishda saqlaydi.

Bo'lim testida fayllar va xatolar birga so'raladi.

Fayllar va xatolar — konspekt

Fayllar va xatolar Maqola

Fayl o'qish/yozish, pickle, JSON va try-except — bir sahifada.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.