ailiteracynepal 🇳🇵
पाठ आकार

अध्याय २ · खण्ड III · 32 मिनेट

फाइल पढ्ने र लेख्ने: CSV, JSON, र पाठ

डाटा फाइलमा बस्छ। तीन ढाँचा — सादा पाठ, CSV, JSON — यो ट्र्याकमा तपाईंले छुने झन्डै हरेक फाइल ओगट्छन्। तिनैमा डाटा भित्र-बाहिर सार्न सिक्नुहोस् भने बाँकी कोर्स सुरु हुन सक्छ।

यो अध्यायका सबै सूची, शब्दकोश, र तालिकाहरू कार्यक्रमभित्रै बसेका थिए — नोटबुक सेलमा हातले टाइप गरिएका, कर्नेल बन्द हुनासाथ हराउने। वास्तविक डाटा कार्यक्रमभित्र बस्दैन। यो फाइलमा बस्छ: कसैले बैङ्क खाताबाट निर्यात गरेको CSV, API ले फिर्ता गरेको JSON, गत हप्ता तपाईं आफैले टाइप गरेको रसिदहरूको पाठ लग। यो खण्ड त्यो डाटालाई आफ्नो कार्यक्रममा ल्याउने र आफ्नो कार्यक्रमको नतिजालाई फेरि बाहिर निकाल्ने बारे हो — कतै इमेल गर्न, साझा गर्न, वा Excel मा खोल्न सकिने केहीमा।

तीन ढाँचाले अधिकांश ओगट्छन्

चार पाठ्यक्रम निर्माणका लागि, तीन फाइल ढाँचाले झन्डै हरेक फाइल ओगट्छन्:

  1. सादा पाठ.txt फाइल, .log फाइल, Markdown नोट। अक्षरका लाइनहरू, बस।
  2. CSV — Comma-Separated Values। स्प्रेडसिटलाई पाठमा सपाट पारेको। प्रति लाइन एक पङ्क्ति, स्तम्भहरू अल्पविरामले छुट्याइएका। Excel, Sheets, NEPSE, वा बैङ्क स्टेटमेन्टका झन्डै सबै निर्यात CSV मा आउँछन्।
  3. JSON — JavaScript Object Notation। नामकरण गरिएका फिल्डसहितको नेस्टेड डाटा। आधुनिक इन्टरनेटका झन्डै हरेक API प्रतिक्रिया JSON मा हुन्छ।

सादा पाठ सबैभन्दा सजिलो। CSV सबैभन्दा सामान्य। JSON सबैभन्दा अभिव्यक्तिशील। हामी यही क्रममा गर्नेछौं।

फाइलहरू कहाँ बस्छन्

फाइल खोल्नुअघि कहाँ छ थाहा हुनुपर्छ। कार्यक्रम हालको कार्य-डिरेक्टरी मा चल्छ — सामान्यतया VS Code मा खोलेको फोल्डर, वा तपाईंको नोटबुक रहेको ठाउँ।

सानो अभ्यास: तपाईंको building-ai-notes फोल्डरमा data नामको नयाँ फोल्डर बनाउनुहोस्। हामी उदाहरण फाइलहरू त्यहाँ राख्नेछौं। जब तपाईं open("data/prices.csv") लेख्नुहुन्छ, Python ले हालको कार्य-डिरेक्टरीभित्र data फोल्डर खोज्छ, र त्यसभित्र prices.csv फाइल।

यदि कुनै बेला FileNotFoundError आउँछ भने, झन्डै सधैं यसको अर्थ हुन्छ: फाइल तपाईंले सोचेको ठाउँमा छैन, अथवा तपाईं सोचेको ठाउँमा हुनुहुन्न। दुवै तीस सेकेन्डमा हल हुन्छन् यदि सही प्रश्न बुझ्नुभयो भने।

सादा पाठ पढ्ने र लेख्ने

सबैभन्दा सरल अवस्था। data/notes.txt मा दुई लाइन भएको फाइल:

Bought sabji from Lokanthali — Rs 380
Diesel for the bike — Rs 600

पूरै फाइललाई एउटै स्ट्रिङका रूपमा पढ्न:

with open("data/notes.txt") as f:
    contents = f.read()

print(contents)

लाइनदर-लाइन पढ्न — साना फाइलभन्दा ठूलाका लागि सामान्यतया यो चाहिन्छ:

with open("data/notes.txt") as f:
    for line in f:
        print(line.strip())

.strip() ले प्रत्येक लाइनसँग आउने पुच्छरको नयाँ-लाइन वर्ण हटाउँछ।

फाइल लेख्न:

with open("data/output.txt", "w") as f:
    f.write("Hello from a Python program.\n")

केही कुरा अगाडि लानुहोस्:

  • with open(...) as f: ढाँचा आधुनिक Python मा फाइल खोल्ने सही तरिका हो। इन्डेन्ट ब्लक सकिएपछि Python ले फाइल स्वचालित रूपमा बन्द गर्छ। तपाईंले आफै बन्द गर्नु पर्दैन।
  • दोस्रो आर्गुमेन्ट मोड हो। "r" पढ्ने (पूर्वनिर्धारित), "w" लेख्ने (र पुरानो जति फाइल भए मौन रूपमा बदलिदिन्छ), "a" अन्तमा थप्ने। "w" पहिलो पटक प्रयोग गर्दा बाटो दुई पटक जाँच्नुहोस्। राख्न चाहेको फाइललाई बदलिदिनु वास्तविक र दुःखद सुरुआती अनुभव हो।

CSV पढ्ने

Course 02 देखि अघि तपाईंले काम गर्ने झन्डै हरेक डाटासेट CSV का रूपमा आउँछ। सानो उदाहरण। data/prices.csv मा यो राख्नुहोस्:

date,close
2026-06-23,2105.4
2026-06-24,2128.9
2026-06-25,2117.3
2026-06-26,2134.7

पहिलो लाइन हेडर हो: यसले स्तम्भहरूलाई नाम दिन्छ। यसपछिको प्रत्येक लाइन एउटा पङ्क्ति हो, स्तम्भ क्रमसँग मिल्ने अल्पविरामले छुट्याइएको मानहरूसहित।

Python मा निर्मित csv मोड्युल छ। यसमा सबैभन्दा मित्रवत् औजार DictReader हो, जसले प्रत्येक पङ्क्तिलाई हेडर स्तम्भहरूले की लगाएको शब्दकोशको रूपमा पढ्छ — खण्ड 1 कै शब्दकोश-को-सूची आकार:

import csv

with open("data/prices.csv") as f:
    reader = csv.DictReader(f)
    rows = list(reader)

print(rows[0])              # {'date': '2026-06-23', 'close': '2105.4'}
print(rows[0]["close"])     # '2105.4'

ध्यान दिनुहोस् कि मूल्य स्ट्रिङ ('2105.4') का रूपमा आयो, सङ्ख्या होइन। CSV पाठ ढाँचा हो — यसभित्रको सबै कुरा पाठ हो। अंकगणित गर्न चाहनुहुन्छ भने रूपान्तरण गर्नुहोस्:

for row in rows:
    row["close"] = float(row["close"])

यसपछि rows[0]["close"] सङ्ख्या 2105.4 हुन्छ र तपाईं जोड्न, औसत निकाल्न, चित्र बनाउन सक्नुहुन्छ।

CSV लेख्न उल्टो:

import csv

summaries = [
    {"date": "2026-06-23", "summary": "Up 1.1%"},
    {"date": "2026-06-24", "summary": "Up 1.1%"},
]

with open("data/summaries.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=["date", "summary"])
    writer.writeheader()
    writer.writerows(summaries)

newline="" Windows-विशेष सानो विशेषता हो जसले पङ्क्तिबीचमा खाली लाइन बन्न दिँदैन। राख्नुहोस्; फेरि सोच्नु पर्दैन।

JSON पढ्ने र लेख्ने

JSON झन्डै हरेक वेब API ले फिर्ता गर्ने कुरा हो। यो Python शब्दकोश जस्तै देखिन्छ — र वास्तवमा Python को json मोड्युलले दुईबीच लगभग सजिलैसँग रूपान्तरण गर्छ।

सानो उदाहरण। data/profile.json मा यो राख्नुहोस्:

{
  "name": "AI Literacy Nepal",
  "tracks": ["learning", "building", "professionals"],
  "active": true,
  "learners": 1240
}

पढ्न:

import json

with open("data/profile.json") as f:
    profile = json.load(f)

print(profile["name"])      # "AI Literacy Nepal"
print(profile["tracks"])    # ['learning', 'building', 'professionals']

json.load(...) पछि, profile एउटा सामान्य Python शब्दकोश हो। की, सूची, सङ्ख्या, र बुलियन सबै बिनै बाधा सरेर जान्छन्।

JSON लेख्न उल्टो:

import json

result = {
    "vendor": "Khalti",
    "total_today": 5450,
    "transaction_count": 2,
}

with open("data/result.json", "w") as f:
    json.dump(result, f, indent=2)

indent=2 आर्गुमेन्ट कसैले (तपाईं समेत) पछि सम्पादकमा फाइल खोल्दा देखिने दया हो — यसले JSON लाई एकै लाइनमा थुपार्ने सट्टा धेरै लाइनमा ढाँचा गर्छ। पूर्ण रूपमा वैकल्पिक, तर सधैं समावेश गर्न लायक।

स्ट्रिङमा काम गर्ने दुई नजिकका दिदी-भाइ:

  • json.loads(s) (s को नोट) — JSON स्ट्रिङलाई Python वस्तुमा पार्स गर्ने।
  • json.dumps(obj) — Python वस्तुलाई JSON स्ट्रिङमा सिरियलाइज गर्ने।

Course 04 मा भाषा मोडेलले जवाफमा JSON फिर्ता दिँदा तपाईंले यिनलाई निरन्तर प्रयोग गर्नुहुनेछ।

अन्त्य-देखि-अन्त्य एउटा सानो उदाहरण

अध्याय जोडेर। CSV बाट मूल्य पढ्ने, औसत निकाल्ने, JSON सारांश लेख्ने:

import csv
import json

with open("data/prices.csv") as f:
    rows = list(csv.DictReader(f))

for row in rows:
    row["close"] = float(row["close"])

average = sum(r["close"] for r in rows) / len(rows)

summary = {
    "instrument": "NEPSE Index",
    "average_close": round(average, 2),
    "days_observed": len(rows),
}

with open("data/summary.json", "w") as f:
    json.dump(summary, f, indent=2)

print(summary)

त्यो कार्यक्रम पढ्नुहोस्। प्रत्येक टुक्रा यो अध्यायबाट आउँछ: शब्दकोशहरूको सूची (पङ्क्तिहरू), लूप (प्रकार रूपान्तरण), निर्मित फङ्क्सन (sum, len, round), फाइल पढाइ (CSV), फाइल लेखाइ (JSON)। यो डाटा-पाइपलाइनको सानै तर वास्तविक संस्करण हो — पढ्ने, रूपान्तरण गर्ने, लेख्ने — र यो ठ्याक्कै तपाईंको Course 02 र Course 03 को अधिकांश काम जस्तो देखिन्छ।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

तपाईंले csv.DictReader ले CSV पढ्नुभयो र तुरुन्तै `rows[0]['close'] + 100` कोसिस गर्नुभयो। Python ले TypeError फ्याँक्छ। किन?

Quick check

एक जुनियर इन्जिनियरले लेख्छन्: with open('config.json', 'w') as f: f.write('{updated}') यो कोडमा खतरनाक के छ?

अब के आउँछ — र एउटा सानो परावर्तन

यो अध्याय Course 01 को “सादा Python” चापको अन्त्य हो। तपाईं डाटा आकारमा राख्न, लूप र फङ्क्सनबाट सार्न, र डिस्कमा पढ्न-लेख्न जान्नुहुन्छ। बाँकी ट्र्याकका झन्डै हरेक कार्यक्रम यी तीनको कुनै पुनः सम्मिश्रण हो।

अध्याय 3 ले एक तह बढ्छ। हामी सादा Python सूचीबाट NumPy arrays (छिटा), सादा Python शब्दकोशबाट pandas DataFrames (शक्तिशाली), र print कथनबाट matplotlib plots (वास्तवमा हेर्न सकिने चार्ट) तर्फ सर्छौं। यी तीन पुस्तकालय संसारका हरेक कार्यरत डाटा-कर्मीको — एआई बनाउने सबैसहित — सङ्ख्यात्मक उपकरण-पेटी हुन्।

पृष्ठ पल्टाउनुअघि, खण्ड 1 मा तपाईंले लेख्नुभएको सानो समस्या फेर्केर हेर्नुहोस्। तपाईं अब लगभग जुनसुकै रूपको त्यो डाटा Python कार्यक्रममा पढ्न सक्नुहुन्छ। यो सानो कुरा होइन।