16. JSON, CSV va ma’lumotlar bilan ishlash¶
Dasturlashda ma’lumotlarni fayllarda saqlash va boshqa dasturlar bilan almashish juda muhim.
Amaliy dasturlarda ma’lumotlar ko‘pincha:
JSON
CSV
matnli fayllar
ma’lumotlar bazalari
API javoblari
ko‘rinishida uchraydi.
Python JSON va CSV bilan ishlash uchun kerakli vositalarni standart kutubxonada taqdim etadi.
Bu bobda:
- JSON nima?
json.loads()json.dumps()json.load()json.dump()- CSV nima?
csv.readercsv.DictReader- ma’lumotlarni qayta ishlash
mavzularini o‘rganamiz.
JSON nima?¶
JSON — JavaScript Object Notation so‘zlarining qisqartmasi.
JSON dasturlar orasida ma’lumot almashish uchun keng ishlatiladigan formatdir.
Masalan:
{
"ism": "Ali",
"yosh": 25,
"dasturchi": true
}
JSON quyidagi ma’lumotlarni saqlashi mumkin:
matn
son
mantiqiy qiymat
ro‘yxat
obyekt
null
JSON va Python¶
JSON strukturasi Python ma’lumot tuzilmalariga juda o‘xshaydi.
JSON:
{
"ism": "Ali",
"yosh": 25
}
Python:
foydalanuvchi = {
"ism": "Ali",
"yosh": 25
}
Lekin ular aynan bir xil format emas.
Python'dagi:
True
False
None
JSON'da:
true
false
null
ko‘rinishida yoziladi.
json modulini import qilish¶
Python'da JSON bilan ishlash uchun:
import json
deb yozamiz.
json.loads()¶
json.loads() JSON formatidagi matnni Python obyektiga aylantiradi.
import json
matn = """
{
"ism": "Ali",
"yosh": 25,
"dasturchi": true
}
"""
foydalanuvchi = json.loads(
matn
)
print(
f"Ism: {foydalanuvchi['ism']}"
)
print(
f"Yosh: {foydalanuvchi['yosh']}"
)
print(
f"Dasturchi: {foydalanuvchi['dasturchi']}"
)
Natija:
Ism: Ali
Yosh: 25
Dasturchi: True
loads() nomidagi s¶
Bu yerda s:
string
ma’nosini bildiradi.
Shuning uchun:
json.loads()
JSON matni bilan ishlaydi.
JSON massivini o‘qish¶
JSON ro‘yxat ham saqlashi mumkin.
import json
matn = """
[
"Python",
"Java",
"C++"
]
"""
tillar = json.loads(
matn
)
for til in tillar:
print(
f"Dasturlash tili: {til}"
)
Natija:
Dasturlash tili: Python
Dasturlash tili: Java
Dasturlash tili: C++
JSON ichida obyektlar ro‘yxati¶
import json
matn = """
[
{
"ism": "Ali",
"yosh": 25
},
{
"ism": "Vali",
"yosh": 30
},
{
"ism": "Sami",
"yosh": 22
}
]
"""
foydalanuvchilar = json.loads(
matn
)
for foydalanuvchi in foydalanuvchilar:
print(
f"{foydalanuvchi['ism']} - "
f"{foydalanuvchi['yosh']} yosh"
)
json.dumps()¶
json.dumps() Python obyektini JSON matniga aylantiradi.
import json
foydalanuvchi = {
"ism": "Ali",
"yosh": 25,
"dasturchi": True
}
matn = json.dumps(
foydalanuvchi
)
print(
matn
)
Natija:
{"ism": "Ali", "yosh": 25, "dasturchi": true}
dumps() nomidagi s¶
Bu yerdagi s ham:
string
ma’nosini bildiradi.
Shuning uchun:
json.dumps()
JSON matnini qaytaradi.
loads() va dumps() farqi¶
json.loads()
JSON matni → Python obyekti
json.dumps()
Python obyekti → JSON matni
Masalan:
import json
asl_matn = '{"ism": "Ali", "yosh": 25}'
obyekt = json.loads(
asl_matn
)
yangi_matn = json.dumps(
obyekt
)
print(
f"Python obyekti: {obyekt}"
)
print(
f"JSON matni: {yangi_matn}"
)
indent¶
json.dumps() yordamida JSON'ni chiroyli formatda chiqarish mumkin.
import json
foydalanuvchi = {
"ism": "Ali",
"yosh": 25,
"dasturchi": True
}
matn = json.dumps(
foydalanuvchi,
indent=4
)
print(
matn
)
Natija:
{
"ism": "Ali",
"yosh": 25,
"dasturchi": true
}
ensure_ascii¶
O‘zbekcha yoki boshqa Unicode belgilar bilan ishlaganda ensure_ascii=False foydali.
import json
foydalanuvchi = {
"ism": "G‘ayrat",
"shahar": "Toshkent"
}
matn = json.dumps(
foydalanuvchi,
ensure_ascii=False,
indent=4
)
print(
matn
)
Natija:
{
"ism": "G‘ayrat",
"shahar": "Toshkent"
}
JSON fayl¶
JSON ma’lumotlarini faylga saqlash mumkin.
Masalan:
foydalanuvchi.json
fayli:
{
"ism": "Ali",
"yosh": 25,
"dasturchi": true
}
json.load()¶
json.load() JSON faylini o‘qib, Python obyektiga aylantiradi.
import json
with open(
"foydalanuvchi.json",
"r",
encoding="utf-8"
) as fayl:
foydalanuvchi = json.load(
fayl
)
print(
f"Ism: {foydalanuvchi['ism']}"
)
print(
f"Yosh: {foydalanuvchi['yosh']}"
)
json.dump()¶
json.dump() Python obyektini JSON fayliga yozadi.
import json
foydalanuvchi = {
"ism": "Ali",
"yosh": 25,
"dasturchi": True
}
with open(
"foydalanuvchi.json",
"w",
encoding="utf-8"
) as fayl:
json.dump(
foydalanuvchi,
fayl,
ensure_ascii=False,
indent=4
)
load() va dump() farqi¶
json.load()
JSON fayl → Python obyekti
json.dump()
Python obyekti → JSON fayl
loads() va dumps() esa matn bilan ishlaydi.
loads()
JSON matni → Python
dumps()
Python → JSON matni
JSON bilan to‘liq misol¶
import json
foydalanuvchilar = [
{
"ism": "Ali",
"yosh": 25
},
{
"ism": "Vali",
"yosh": 30
},
{
"ism": "Sami",
"yosh": 22
}
]
with open(
"foydalanuvchilar.json",
"w",
encoding="utf-8"
) as fayl:
json.dump(
foydalanuvchilar,
fayl,
ensure_ascii=False,
indent=4
)
with open(
"foydalanuvchilar.json",
"r",
encoding="utf-8"
) as fayl:
qayta_oqilgan_foydalanuvchilar = json.load(
fayl
)
for foydalanuvchi in qayta_oqilgan_foydalanuvchilar:
print(
f"{foydalanuvchi['ism']} - "
f"{foydalanuvchi['yosh']} yosh"
)
CSV¶
CSV — Comma-Separated Values so‘zlarining qisqartmasi.
CSV jadval ko‘rinishidagi ma’lumotlarni saqlash uchun ishlatiladi.
Masalan:
ism,yosh,shahar
Ali,25,Toshkent
Vali,30,Samarqand
Sami,22,Buxoro
Birinchi qator odatda ustun nomlarini bildiradi.
CSV moduli¶
Python'da CSV bilan ishlash uchun:
import csv
ishlatiladi.
csv.reader¶
csv.reader CSV faylini qatorlar bo‘yicha o‘qishga yordam beradi.
Masalan:
foydalanuvchilar.csv
fayli:
ism,yosh,shahar
Ali,25,Toshkent
Vali,30,Samarqand
Sami,22,Buxoro
Uni o‘qish:
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.reader(
fayl
)
for qator in oqish:
print(
qator
)
Natija:
['ism', 'yosh', 'shahar']
['Ali', '25', 'Toshkent']
['Vali', '30', 'Samarqand']
['Sami', '22', 'Buxoro']
CSV sarlavhasini ajratish¶
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.reader(
fayl
)
sarlavha = next(
oqish
)
print(
f"Sarlavha: {sarlavha}"
)
for qator in oqish:
print(
f"Ma'lumot: {qator}"
)
csv.writer¶
CSV fayliga ma’lumot yozish uchun csv.writer ishlatiladi.
import csv
foydalanuvchilar = [
["Ali", 25, "Toshkent"],
["Vali", 30, "Samarqand"],
["Sami", 22, "Buxoro"]
]
with open(
"foydalanuvchilar.csv",
"w",
encoding="utf-8",
newline=""
) as fayl:
yozish = csv.writer(
fayl
)
yozish.writerow(
[
"ism",
"yosh",
"shahar"
]
)
yozish.writerows(
foydalanuvchilar
)
writerow()¶
Bitta qator yozadi:
yozish.writerow(
[
"Ali",
25,
"Toshkent"
]
)
writerows()¶
Bir nechta qatorni yozadi:
yozish.writerows(
[
["Ali", 25],
["Vali", 30],
["Sami", 22]
]
)
csv.DictReader¶
CSV faylida ustunlar bilan nom orqali ishlash uchun DictReader juda qulay.
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for foydalanuvchi in oqish:
print(
f"Ism: {foydalanuvchi['ism']}"
)
print(
f"Yosh: {foydalanuvchi['yosh']}"
)
print(
f"Shahar: {foydalanuvchi['shahar']}"
)
DictReader nima uchun qulay?¶
csv.reader:
qator[0]
qator[1]
qator[2]
ko‘rinishida ishlaydi.
DictReader esa:
foydalanuvchi["ism"]
foydalanuvchi["yosh"]
foydalanuvchi["shahar"]
ko‘rinishida ishlaydi.
Bu katta CSV fayllarda kodni tushunarli qiladi.
csv.DictWriter¶
Lug‘atlarni CSV fayliga yozish uchun DictWriter ishlatiladi.
import csv
foydalanuvchilar = [
{
"ism": "Ali",
"yosh": 25,
"shahar": "Toshkent"
},
{
"ism": "Vali",
"yosh": 30,
"shahar": "Samarqand"
},
{
"ism": "Sami",
"yosh": 22,
"shahar": "Buxoro"
}
]
ustunlar = [
"ism",
"yosh",
"shahar"
]
with open(
"foydalanuvchilar.csv",
"w",
encoding="utf-8",
newline=""
) as fayl:
yozish = csv.DictWriter(
fayl,
fieldnames=ustunlar
)
yozish.writeheader()
yozish.writerows(
foydalanuvchilar
)
CSV qiymatlari matn bo‘lishi¶
CSV faylidan o‘qilgan qiymatlar odatda matn sifatida keladi.
Masalan:
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for foydalanuvchi in oqish:
yosh = int(
foydalanuvchi["yosh"]
)
print(
f"{foydalanuvchi['ism']} "
f"{yosh} yoshda."
)
Bu yerda:
foydalanuvchi["yosh"]
avval matn bo‘ladi.
Shuning uchun:
int(...)
orqali songa aylantirdik.
JSON va CSV farqi¶
JSON:
{
"ism": "Ali",
"yosh": 25,
"ko'nikmalar": [
"Python",
"SQL"
]
}
CSV:
ism,yosh
Ali,25
JSON murakkabroq ichki strukturani saqlashga qulay.
CSV esa jadval ko‘rinishidagi ma’lumotlar uchun qulay.
Qachon JSON ishlatish kerak?¶
JSON quyidagi holatlarda juda foydali:
API
konfiguratsiya
murakkab obyektlar
ichma-ich ma’lumotlar
dasturlar orasida ma’lumot almashish
Masalan:
{
"foydalanuvchi": {
"ism": "Ali",
"aloqa": {
"email": "[email protected]"
}
}
}
Qachon CSV ishlatish kerak?¶
CSV quyidagi holatlarda qulay:
jadval ma’lumotlari
Excel bilan ishlash
hisobotlar
oddiy ma’lumotlar eksporti
katta satrli ma’lumotlar
Masalan:
ism,yosh,baho
Ali,25,90
Vali,30,85
Sami,22,95
JSON ma’lumotlarini qayta ishlash¶
JSON'dan o‘qilgan ma’lumot oddiy Python obyektiga aylangani uchun u bilan odatdagi Python kodlari orqali ishlash mumkin.
import json
matn = """
[
{
"ism": "Ali",
"yosh": 25
},
{
"ism": "Vali",
"yosh": 30
},
{
"ism": "Sami",
"yosh": 22
}
]
"""
foydalanuvchilar = json.loads(
matn
)
voyaga_yetganlar = [
foydalanuvchi
for foydalanuvchi in foydalanuvchilar
if foydalanuvchi["yosh"] >= 25
]
for foydalanuvchi in voyaga_yetganlar:
print(
f"{foydalanuvchi['ism']} - "
f"{foydalanuvchi['yosh']} yosh"
)
JSON ma’lumotlarini o‘zgartirish¶
import json
matn = """
{
"ism": "Ali",
"yosh": 25
}
"""
foydalanuvchi = json.loads(
matn
)
foydalanuvchi["yosh"] = 26
foydalanuvchi["shahar"] = "Toshkent"
yangi_matn = json.dumps(
foydalanuvchi,
ensure_ascii=False,
indent=4
)
print(
yangi_matn
)
CSV ma’lumotlarini filtrlash¶
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for foydalanuvchi in oqish:
yosh = int(
foydalanuvchi["yosh"]
)
if yosh >= 25:
print(
f"{foydalanuvchi['ism']} "
f"mos keldi."
)
CSV ma’lumotlarini hisoblash¶
Masalan, mahsulotlar:
nom,narx
Noutbuk,800
Telefon,500
Monitor,300
Ularning umumiy narxini hisoblash:
import csv
umumiy_narx = 0
with open(
"mahsulotlar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for mahsulot in oqish:
narx = float(
mahsulot["narx"]
)
umumiy_narx += narx
print(
f"Umumiy narx: {umumiy_narx}"
)
JSON va CSV o‘rtasida konvertatsiya¶
CSV ma’lumotlarini JSON formatiga aylantirish mumkin.
import csv
import json
foydalanuvchilar = []
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for qator in oqish:
foydalanuvchilar.append(
{
"ism": qator["ism"],
"yosh": int(qator["yosh"]),
"shahar": qator["shahar"]
}
)
with open(
"foydalanuvchilar.json",
"w",
encoding="utf-8"
) as fayl:
json.dump(
foydalanuvchilar,
fayl,
ensure_ascii=False,
indent=4
)
print(
"CSV ma'lumotlari JSON fayliga aylantirildi."
)
Amaliy loyiha — Softromeda ma’lumotlar konvertori¶
Endi CSV faylidan foydalanuvchilarni o‘qib, ularni JSON fayliga saqlaydigan kichik loyiha yaratamiz.
CSV:
ism,yosh,kasb
Ali,25,Dasturchi
Vali,30,Dizayner
Sami,22,Tahlilchi
Python dasturi:
import csv
import json
foydalanuvchilar = []
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for qator in oqish:
foydalanuvchi = {
"ism": qator["ism"],
"yosh": int(qator["yosh"]),
"kasb": qator["kasb"]
}
foydalanuvchilar.append(
foydalanuvchi
)
with open(
"foydalanuvchilar.json",
"w",
encoding="utf-8"
) as fayl:
json.dump(
foydalanuvchilar,
fayl,
ensure_ascii=False,
indent=4
)
print(
f"{len(foydalanuvchilar)} ta "
"foydalanuvchi JSON fayliga saqlandi."
)
Natijada:
foydalanuvchilar.json
fayli yaratiladi.
Uning ichida:
[
{
"ism": "Ali",
"yosh": 25,
"kasb": "Dasturchi"
},
{
"ism": "Vali",
"yosh": 30,
"kasb": "Dizayner"
},
{
"ism": "Sami",
"yosh": 22,
"kasb": "Tahlilchi"
}
]
ko‘rinishidagi ma’lumot bo‘ladi.
Ma’lumotlarni tekshirish¶
Tashqi fayldan ma’lumot o‘qiyotganda ma’lumotlar har doim to‘g‘ri bo‘ladi deb hisoblash mumkin emas.
Masalan:
ism,yosh
Ali,25
Vali,yigirma
Sami,22
Bu yerda:
yigirma
son emas.
Shuning uchun ma’lumotni tekshirish kerak.
import csv
with open(
"foydalanuvchilar.csv",
"r",
encoding="utf-8"
) as fayl:
oqish = csv.DictReader(
fayl
)
for qator in oqish:
try:
yosh = int(
qator["yosh"]
)
except ValueError:
print(
f"Noto‘g‘ri yosh: "
f"{qator['yosh']}"
)
continue
print(
f"{qator['ism']} - "
f"{yosh} yosh"
)
JSON xatolarini boshqarish¶
Noto‘g‘ri JSON o‘qilganda JSONDecodeError yuz berishi mumkin.
import json
matn = """
{
"ism": "Ali",
"yosh": 25,
}
"""
try:
foydalanuvchi = json.loads(
matn
)
except json.JSONDecodeError:
print(
"JSON ma'lumotlari noto'g'ri."
)
Fayl kodlashini ko‘rsatish¶
O‘zbekcha matn bilan ishlaganda:
encoding="utf-8"
dan foydalanish muhim.
Masalan:
with open(
"ma'lumotlar.json",
"r",
encoding="utf-8"
) as fayl:
ma'lumotlar = json.load(
fayl
)
JSON yozishda ham:
json.dump(
ma'lumotlar,
fayl,
ensure_ascii=False,
indent=4
)
ishlatish mumkin.
Amaliy mashqlar¶
Mashq 1¶
Quyidagi Python lug‘atini JSON matniga aylantiring:
foydalanuvchi = {
"ism": "Ali",
"yosh": 25,
"shahar": "Toshkent"
}
Mashq 2¶
JSON matnini json.loads() yordamida Python obyektiga aylantiring.
Mashq 3¶
Python ro‘yxatini JSON fayliga json.dump() yordamida yozing.
Mashq 4¶
JSON faylini json.load() yordamida o‘qing.
Mashq 5¶
CSV fayliga csv.writer yordamida 5 ta foydalanuvchi yozing.
Mashq 6¶
CSV faylini csv.reader yordamida o‘qing.
Mashq 7¶
csv.DictReader yordamida foydalanuvchilarni ism bo‘yicha chiqaring.
Mashq 8¶
CSV faylidagi barcha yoshlarning o‘rtacha qiymatini hisoblang.
Mashq 9¶
CSV faylidagi ma’lumotlarni JSON fayliga aylantiring.
Mashq 10¶
Softromeda uchun ma’lumotlarni boshqaruvchi dastur yarating. Dastur:
CSV faylini o‘qisin
ma’lumotlarni tekshirsin
faqat to‘g‘ri ma’lumotlarni qabul qilsin
JSON fayliga saqlasin
nechta ma’lumot qayta ishlanganini ko‘rsatsin
Bob xulosasi¶
Bu bobda ma’lumotlarni JSON va CSV formatlarida saqlash hamda qayta ishlashni o‘rgandik.
JSON bilan ishlash:
json.loads()
json.dumps()
json.load()
json.dump()
CSV bilan ishlash:
csv.reader()
csv.writer()
csv.DictReader()
csv.DictWriter()
Asosiy farq:
loads()
JSON matni → Python
dumps()
Python → JSON matni
load()
JSON fayl → Python
dump()
Python → JSON fayl
CSV esa asosan jadval ko‘rinishidagi ma’lumotlar bilan ishlash uchun qulay.
Eng muhim amaliy ko‘nikma — tashqi ma’lumotlarni shunchaki o‘qish emas, balki:
o‘qish
tekshirish
o‘zgartirish
filtrlash
hisoblash
saqlash
konvertatsiya qilish
jarayonlarini to‘g‘ri tashkil qilishdir.
Keyingi bobda 17. SQLite va ma’lumotlar bazasi mavzusini o‘rganamiz.