13-bo‘lim
Fayllar bilan ishlash
Matnli fayllarni o'qish va yozish, with konstruksiyasi, ochish rejimlari hamda CSV va JSON formatlari bilan ishlash.
Ushbu bo‘lim mundarijasi
Dastur tugagach, xotiradagi barcha ma'lumotlar yo'qoladi. Ularni saqlab qolish uchun faylga yozish kerak.
Faylni ochish va yopish #
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 #
with open("malumot.txt", "w", encoding="utf-8") as fayl:
fayl.write("Salom, dunyo!")
# bu yerda fayl avtomatik yopiladi - xato bo'lsa ham
with ishlatingwith bloki tugashi bilan Python faylni kafolatli yopadi. Bu Python'dagi standart yondashuv va professional kodda open() ni alohida ishlatish deyarli uchramaydi.
Ochish rejimlari #
| Rejim | Nomi | Fayl yo'q bo'lsa | Mavjud mazmun |
|---|---|---|---|
"r" | O'qish (standart) | Xato beradi | Saqlanadi |
"w" | Yozish | Yaratadi | O'chiriladi |
"a" | Qo'shish | Yaratadi | Saqlanadi, oxiriga yoziladi |
"x" | Yaratish | Yaratadi | Fayl bor bo'lsa xato |
"r+" | O'qish + yozish | Xato beradi | Saqlanadi |
"rb" / "wb" | Ikkilik rejim | - | Rasm, PDF uchun |
"w" rejimi faylni tozalaydiwith open("muhim.txt", "w") as fayl: # butun mazmun YO'QOLDI
fayl.write("yangi")
Mavjud faylga qo'shish uchun "a" rejimini ishlating.
Faylga yozish #
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.")
Fayl yozildi.
encoding="utf-8" ni unutmangO'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 #
# 1. To'liq mazmunni bitta satrga
with open("talabalar.txt", "r", encoding="utf-8") as fayl:
mazmun = fayl.read()
print(mazmun)
GURUH RO'YXATI
====================
1. Husanboy Qodirov
2. Sardor Aliyev
3. Malika Yusupova
# 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())
Satrlar soni: 5
1. Husanboy Qodirov
# 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()}")
1: GURUH RO'YXATI
2: ====================
3: 1. Husanboy Qodirov
4: 2. Sardor Aliyev
5: 3. Malika Yusupova
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 #
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}")
Fayl mavjud, hajmi: 89 bayt
Mavjudmi: True
Nomi: talabalar.txt
Kengaytma: .txt
Papka: .
pathlib bilan qisqa o'qish/yozish #
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)
Bugungi qaydlar
Fayllar ustidagi amallar #
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.
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}")
Ism Yosh Baho
Husanboy Qodirov 25 85
Sardor Aliyev 25 78
Malika Yusupova 21 95
newline="" parametriCSV 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 #
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")
Husanboy: 85 ball
Sardor: 78 ball
JSON fayllar #
JSON - dasturlar orasida ma'lumot almashishning standart formati. Python lug'ati bilan deyarli aynan mos keladi.
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"])
Husanboy
['Python', 'SQL', 'Git']
Fayl mazmuni quyidagicha bo'ladi:
{
"til": "uz",
"mavzu": "yorug'",
"bildirishnomalar": true,
"oxirgi_kirish": "2026-09-08",
"sevimli_darsliklar": ["Python", "SQL", "Git"],
"profil": {
"ism": "Husanboy",
"yosh": 25
}
}
| Funksiya | Vazifasi |
|---|---|
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 #
# ============================================
# 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")
========================================================
# 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
xarajatlar.py dasturini yozing:
- Foydalanuvchidan xarajat nomi va summasini so'rang.
- Har bir xarajatni
xarajatlar.csvfayligaDictWriterbilan qo'shing ("a"rejimida). - Alohida funksiyada faylni o'qib, jami summani hisoblang.
- Eng katta xarajatni toping va chiqaring.
- Sozlamalarni (masalan, valyuta nomi)
sozlamalar.jsonfaylida 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 faylbilan satrma-satr o'qing. - CSV - jadval uchun, JSON - tuzilmali ma'lumot uchun.
pathlib.Pathfayl yo'llari bilan ishlashning zamonaviy usuli.
Keyingi bo'limda dastur xatolarini boshqarishni - istisnolarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.