13-bo‘lim

Fayllar bilan ishlash

Matnli fayllarni o'qish va yozish, with konstruksiyasi, ochish rejimlari hamda CSV va JSON formatlari bilan ishlash.

🕑 14 daqiqa o‘qish 📄 526 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Faylni ochish va yopish
  2. with - to'g'ri usul
  3. Ochish rejimlari
  4. Faylga yozish
  5. Fayldan o'qish
  6. Fayl mavjudligini tekshirish
  7. pathlib bilan qisqa o'qish/yozish
  8. Fayllar ustidagi amallar
  9. CSV fayllar
  10. DictReader va DictWriter - qulayroq usul
  11. JSON fayllar
  12. Amaliy misol: qaydlar ilovasi
  13. Xulosa

Dastur tugagach, xotiradagi barcha ma'lumotlar yo'qoladi. Ularni saqlab qolish uchun faylga yozish kerak.

Faylni ochish va yopish #

Python
fayl = open("malumot.txt", "w", encoding="utf-8")
fayl.write("Salom, dunyo!")
fayl.close()          # yopishni unutmaslik kerak

Bu usulning kamchiligi bor: agar write paytida xato chiqsa, close() bajarilmaydi va fayl ochiq qoladi.

with - to'g'ri usul #

Python
with open("malumot.txt", "w", encoding="utf-8") as fayl:
    fayl.write("Salom, dunyo!")
# bu yerda fayl avtomatik yopiladi - xato bo'lsa ham
Har doim with ishlating

with bloki tugashi bilan Python faylni kafolatli yopadi. Bu Python'dagi standart yondashuv va professional kodda open() ni alohida ishlatish deyarli uchramaydi.

Ochish rejimlari #

RejimNomiFayl yo'q bo'lsaMavjud mazmun
"r"O'qish (standart)Xato beradiSaqlanadi
"w"YozishYaratadiO'chiriladi
"a"Qo'shishYaratadiSaqlanadi, oxiriga yoziladi
"x"YaratishYaratadiFayl bor bo'lsa xato
"r+"O'qish + yozishXato beradiSaqlanadi
"rb" / "wb"Ikkilik rejim-Rasm, PDF uchun
"w" rejimi faylni tozalaydi
Python
with open("muhim.txt", "w") as fayl:      # butun mazmun YO'QOLDI
    fayl.write("yangi")

Mavjud faylga qo'shish uchun "a" rejimini ishlating.

Faylga yozish #

Python
talabalar = ["Husanboy Qodirov", "Sardor Aliyev", "Malika Yusupova"]

# Bitta satr
with open("talabalar.txt", "w", encoding="utf-8") as fayl:
    fayl.write("GURUH RO'YXATI\n")
    fayl.write("=" * 20 + "\n")

# Ko'p satr qo'shish
with open("talabalar.txt", "a", encoding="utf-8") as fayl:
    for tartib, ism in enumerate(talabalar, start=1):
        fayl.write(f"{tartib}. {ism}\n")

print("Fayl yozildi.")
Natija
Fayl yozildi.
encoding="utf-8" ni unutmang

O'zbek tilidagi harflar (o', g', sh) va Kirill yozuvi uchun bu majburiy. Windows'da sukut bo'yicha cp1251 ishlatiladi va matn buzilib ketadi.

Fayldan o'qish #

Python
# 1. To'liq mazmunni bitta satrga
with open("talabalar.txt", "r", encoding="utf-8") as fayl:
    mazmun = fayl.read()
print(mazmun)
Natija
GURUH RO'YXATI
====================
1. Husanboy Qodirov
2. Sardor Aliyev
3. Malika Yusupova
Python
# 2. Satrlar ro'yxati sifatida
with open("talabalar.txt", "r", encoding="utf-8") as fayl:
    satrlar = fayl.readlines()

print(f"Satrlar soni: {len(satrlar)}")
print(satrlar[2].strip())
Natija
Satrlar soni: 5
1. Husanboy Qodirov
Python
# 3. Satrma-satr (eng samarali usul)
with open("talabalar.txt", "r", encoding="utf-8") as fayl:
    for raqam, satr in enumerate(fayl, start=1):
        print(f"{raqam:>2}: {satr.rstrip()}")
Natija
 1: GURUH RO'YXATI
 2: ====================
 3: 1. Husanboy Qodirov
 4: 2. Sardor Aliyev
 5: 3. Malika Yusupova
Katta fayllar uchun satrma-satr o'qing

read() butun faylni xotiraga yuklaydi. 2 GB li log faylni shunday o'qisangiz, kompyuter qotib qoladi. for satr in fayl esa bir vaqtda faqat bitta satrni xotirada tutadi.

Fayl mavjudligini tekshirish #

Python
import os

if os.path.exists("talabalar.txt"):
    hajm = os.path.getsize("talabalar.txt")
    print(f"Fayl mavjud, hajmi: {hajm} bayt")
else:
    print("Fayl topilmadi")

# Zamonaviy usul - pathlib
from pathlib import Path

fayl = Path("talabalar.txt")
print(f"Mavjudmi:  {fayl.exists()}")
print(f"Nomi:      {fayl.name}")
print(f"Kengaytma: {fayl.suffix}")
print(f"Papka:     {fayl.parent}")
Natija
Fayl mavjud, hajmi: 89 bayt
Mavjudmi:  True
Nomi:      talabalar.txt
Kengaytma: .txt
Papka:     .

pathlib bilan qisqa o'qish/yozish #

Python
from pathlib import Path

fayl = Path("qayd.txt")

fayl.write_text("Bugungi qaydlar\n", encoding="utf-8")
mazmun = fayl.read_text(encoding="utf-8")
print(mazmun)
Natija
Bugungi qaydlar

Fayllar ustidagi amallar #

Python
import os
import shutil

os.rename("eski.txt", "yangi.txt")        # nomini o'zgartirish
shutil.copy("yangi.txt", "nusxa.txt")     # nusxa olish
shutil.move("nusxa.txt", "arxiv/")        # ko'chirish
os.remove("nusxa.txt")                    # o'chirish

os.makedirs("hisobotlar/2026", exist_ok=True)   # papka yaratish
print(os.listdir("."))                    # papka mazmunini ko'rish

CSV fayllar #

CSV (Comma-Separated Values) - jadval ma'lumotlarini saqlashning eng keng tarqalgan formati. Excel ham uni ochadi.

Python
import csv

talabalar = [
    ["Ism", "Yosh", "Shahar", "Baho"],
    ["Husanboy Qodirov", 25, "Namangan", 85],
    ["Sardor Aliyev", 25, "Toshkent", 78],
    ["Malika Yusupova", 21, "Buxoro", 95],
]

# Yozish
with open("talabalar.csv", "w", encoding="utf-8", newline="") as fayl:
    yozuvchi = csv.writer(fayl)
    yozuvchi.writerows(talabalar)

# O'qish
with open("talabalar.csv", "r", encoding="utf-8") as fayl:
    oquvchi = csv.reader(fayl)
    for qator in oquvchi:
        print(f"{qator[0]:<20}{qator[1]:>5}{qator[3]:>6}")
Natija
Ism                  Yosh  Baho
Husanboy Qodirov       25    85
Sardor Aliyev          25    78
Malika Yusupova        21    95
newline="" parametri

CSV yozishda newline="" ni yozmasangiz, Windows'da har bir qatordan keyin bo'sh satr paydo bo'ladi. Bu doim shunday yoziladi.

DictReader va DictWriter - qulayroq usul #

Python
import csv

# Lug'atlar bilan yozish
talabalar = [
    {"ism": "Husanboy", "yosh": 25, "baho": 85},
    {"ism": "Sardor", "yosh": 25, "baho": 78},
]

with open("guruh.csv", "w", encoding="utf-8", newline="") as fayl:
    ustunlar = ["ism", "yosh", "baho"]
    yozuvchi = csv.DictWriter(fayl, fieldnames=ustunlar)
    yozuvchi.writeheader()
    yozuvchi.writerows(talabalar)

# Lug'atlar sifatida o'qish
with open("guruh.csv", "r", encoding="utf-8") as fayl:
    for qator in csv.DictReader(fayl):
        print(f"{qator['ism']}: {qator['baho']} ball")
Natija
Husanboy: 85 ball
Sardor: 78 ball

JSON fayllar #

JSON - dasturlar orasida ma'lumot almashishning standart formati. Python lug'ati bilan deyarli aynan mos keladi.

Python JSON dict object { } list, tuple array [ ] str / int / float string / number True / False / None true / false / null
Python turlari JSON turlariga qanday mos keladi
Python
import json

sozlamalar = {
    "til": "uz",
    "mavzu": "yorug'",
    "bildirishnomalar": True,
    "oxirgi_kirish": "2026-09-08",
    "sevimli_darsliklar": ["Python", "SQL", "Git"],
    "profil": {
        "ism": "Husanboy",
        "yosh": 25,
    },
}

# Faylga yozish
with open("sozlamalar.json", "w", encoding="utf-8") as fayl:
    json.dump(sozlamalar, fayl, ensure_ascii=False, indent=4)

# Fayldan o'qish
with open("sozlamalar.json", "r", encoding="utf-8") as fayl:
    yuklangan = json.load(fayl)

print(yuklangan["profil"]["ism"])
print(yuklangan["sevimli_darsliklar"])
Natija
Husanboy
['Python', 'SQL', 'Git']

Fayl mazmuni quyidagicha bo'ladi:

JSON
{
    "til": "uz",
    "mavzu": "yorug'",
    "bildirishnomalar": true,
    "oxirgi_kirish": "2026-09-08",
    "sevimli_darsliklar": ["Python", "SQL", "Git"],
    "profil": {
        "ism": "Husanboy",
        "yosh": 25
    }
}
FunksiyaVazifasi
json.dump(obj, fayl)Obyektni faylga yozadi
json.load(fayl)Fayldan obyekt o'qiydi
json.dumps(obj)Obyektni satrga aylantiradi
json.loads(satr)Satrdan obyekt hosil qiladi
ensure_ascii=False nima uchun kerak?

Bu parametrsiz o'zbekcha harflar ' kabi kodlarga aylanib ketadi. indent=4 esa faylni odam o'qiy oladigan qilib formatlaydi.

Amaliy misol: qaydlar ilovasi #

Python
# ============================================
# Oddiy qaydlar ilovasi (JSON saqlash bilan)
# ============================================

import json
from datetime import datetime
from pathlib import Path

FAYL = Path("qaydlar.json")


def qaydlarni_yukla() -> list:
    """Fayldan qaydlarni o'qiydi, fayl yo'q bo'lsa bo'sh ro'yxat qaytaradi."""
    if not FAYL.exists():
        return []
    with open(FAYL, "r", encoding="utf-8") as fayl:
        return json.load(fayl)


def qaydlarni_saqla(qaydlar: list) -> None:
    """Qaydlarni faylga yozadi."""
    with open(FAYL, "w", encoding="utf-8") as fayl:
        json.dump(qaydlar, fayl, ensure_ascii=False, indent=4)


def qayd_qosh(qaydlar: list, matn: str) -> None:
    """Yangi qayd qo'shadi."""
    qaydlar.append({
        "id": len(qaydlar) + 1,
        "matn": matn,
        "sana": datetime.now().strftime("%d.%m.%Y %H:%M"),
        "bajarildi": False,
    })


def qaydlarni_chiqar(qaydlar: list) -> None:
    """Qaydlarni jadval ko'rinishida chiqaradi."""
    if not qaydlar:
        print("Qaydlar yo'q.")
        return

    print("=" * 56)
    print(f"{'#':<4}{'Holat':<8}{'Qayd':<28}{'Sana':>16}")
    print("=" * 56)
    for qayd in qaydlar:
        belgi = "[x]" if qayd["bajarildi"] else "[ ]"
        print(f"{qayd['id']:<4}{belgi:<8}{qayd['matn']:<28}{qayd['sana']:>16}")
    print("=" * 56)


# Dasturni ishlatish
qaydlar = qaydlarni_yukla()

qayd_qosh(qaydlar, "Python 13-bo'limni o'qish")
qayd_qosh(qaydlar, "Amaliy topshiriqni bajarish")
qaydlar[0]["bajarildi"] = True

qaydlarni_saqla(qaydlar)
qaydlarni_chiqar(qaydlar)

print(f"\nJami: {len(qaydlar)} ta qayd")
print(f"Bajarilgan: {sum(1 for q in qaydlar if q['bajarildi'])} ta")
Natija
========================================================
#   Holat   Qayd                                    Sana
========================================================
1   [x]     Python 13-bo'limni o'qish   08.09.2026 14:35
2   [ ]     Amaliy topshiriqni bajarish 08.09.2026 14:35
========================================================

Jami: 2 ta qayd
Bajarilgan: 1 ta
Amaliy topshiriq

xarajatlar.py dasturini yozing:

  1. Foydalanuvchidan xarajat nomi va summasini so'rang.
  2. Har bir xarajatni xarajatlar.csv fayliga DictWriter bilan qo'shing ("a" rejimida).
  3. Alohida funksiyada faylni o'qib, jami summani hisoblang.
  4. Eng katta xarajatni toping va chiqaring.
  5. Sozlamalarni (masalan, valyuta nomi) sozlamalar.json faylida saqlang.

Xulosa #

  • Faylni har doim with open(...) as fayl: orqali oching - u avtomatik yopiladi.
  • "w" mavjud mazmunni o'chiradi, "a" esa oxiriga qo'shadi.
  • O'zbekcha matn uchun encoding="utf-8" majburiy.
  • Katta fayllarni for satr in fayl bilan satrma-satr o'qing.
  • CSV - jadval uchun, JSON - tuzilmali ma'lumot uchun.
  • pathlib.Path fayl yo'llari bilan ishlashning zamonaviy usuli.

Keyingi bo'limda dastur xatolarini boshqarishni - istisnolarni o'rganamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.