डेटा फ़ाइलों के साथ काम करना
ज़्यादातर असली डेटा टेबल के रूप में आता है: मार्क्स लिस्ट, टाइम-टेबल, प्राइस लिस्ट। Python के csv मॉड्यूल से CSV डेटा पढ़ना सीखें और उससे टोटल और ऐवरेज निकालना सीखें।
60 सेकंड में
डेटा फ़ाइलों के साथ काम करना
ज़्यादातर असली डेटा टेबल के रूप में आता है: मार्क्स लिस्ट, टाइम-टेबल, प्राइस लिस्ट। Python के csv मॉड्यूल से CSV डेटा पढ़ना सीखें और उससे टोटल और ऐवरेज निकालना सीखें।
एक CSV फ़ाइल कैसी दिखती है
name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76यहाँ कोई फ़ाइल नहीं है? StringIO का उपयोग करें
io.StringIO से रैप करते हैं। इससे वह स्ट्रिंग खुली हुई फ़ाइल की तरह काम करने लगती है। अपने कंप्यूटर पर आप इसके बजाय open("marks.csv") का उपयोग करेंगे, और बाकी कोड वैसा ही रहेगा।csv.DictReader से पंक्तियों को पढ़ना
csv मॉड्यूल Python के साथ ही आता है। csv.DictReader हेडर को पढ़ता है, फिर आपको हर पंक्ति एक डिक्शनरी के रूप में देता है, जिसमें कॉलम के नाम कीज़ (keys) के रूप में होते हैं।import csv
import io
data = """name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76"""
reader = csv.DictReader(io.StringIO(data))
for row in reader:
print(row["name"], "scored", row["maths"], "in maths")row["maths"] का मान "78" होता है, न कि 78। जोड़ने या तुलना करने से पहले int() या float() से बदल लें, वरना आपको TypeError मिलेगा, या टेक्स्ट आपस में चिपक जाएगा जैसे "7864"।पंक्तियों से गणना करना
import csv
import io
data = """name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76"""
total = 0
count = 0
for row in csv.DictReader(io.StringIO(data)):
total += int(row["maths"])
count += 1
print(f"Maths average: {total / count:.1f}")ट्रेन का समय: घंटों और मिनटों के साथ काम करना
06:10 जैसा समय भी टेक्स्ट ही होता है। एक आसान तरकीब: इन्हें आधी रात के बाद के मिनटों में बदल लें, फिर घटाएँ। यह काल्पनिक टाइम-टेबल दिखाता है कि यह कैसे किया जाता है।import csv
import io
timetable = """train,departs,arrives
Morning Express,06:10,09:45
Coastal Passenger,07:30,12:05
Evening Mail,17:20,21:00"""
def to_minutes(hhmm):
hours, minutes = hhmm.split(":")
return int(hours) * 60 + int(minutes)
for row in csv.DictReader(io.StringIO(timetable)):
mins = to_minutes(row["arrives"]) - to_minutes(row["departs"])
print(f"{row['train']}: {mins // 60} h {mins % 60} min")किसी भी डेटा टास्क के लिए सामान्य कदम
- 1
डेटा को देखें
कॉलम क्या हैं? क्या कोई खाली या अजीब मान हैं? - 2
इसे पढ़ें
csv.DictReader हर पंक्ति के लिए एक डिक्शनरी देता है। - 3
कन्वर्ट करें
नंबर वाले टेक्स्ट को int या float में बदलें। - 4
गणना करें
टोटल, ऐवरेज, सबसे बड़ा, गिनती: लूप्स, लिस्ट और डिक्शनरी का उपयोग करके। - 5
जवाब जाँचें
एक पंक्ति का हिसाब हाथ से लगाएँ और तुलना करें।
यह आगे कहाँ ले जाता है
और देखें और पढ़ें
लैब
दो फ़ंक्शन्स जो मार्क्स CSV को पढ़ते हैं और हर छात्र का टोटल और किसी भी विषय का ऐवरेज देते हैं।
समस्या
दोनों फ़ंक्शन्स पूरे करें। हर फ़ंक्शन marks_csv जैसा CSV टेक्स्ट लेता है (एक name कॉलम, फिर हर विषय के लिए एक कॉलम):
totals(csv_text)सभी विषयों में हर छात्र के टोटल की एक डिक्शनरी लौटाता है, उदाहरण के लिए{"Asha": 253, …}। सलाह: हर पंक्ति में,nameको छोड़कर हर कॉलम को जोड़ें, और हर मान कोint()से कन्वर्ट करें।subject_average(csv_text, subject)किसी एक विषय, जैसे"maths", के लिए पूरी क्लास का ऐवरेज एक नंबर के रूप में लौटाता है।
आपके फ़ंक्शन्स इस बनावट की किसी भी CSV के लिए काम करने चाहिए, भले ही उसमें अलग विषय हों या ज़्यादा छात्र हों। Run दबाएँ, हाथ से एक जवाब जाँचें, फिर Check दबाएँ। इस ट्रैक को पूरा करने पर बधाई! 🎉
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपके दोस्त का कोड <code>"788590"</code> जैसे टोटल दे रहा है। क्या गड़बड़ हुई, और आप इसे कैसे ठीक करेंगे?दिखाएं
उन्होंने मानों को टेक्स्ट के रूप में जोड़ा, इसलिए + ने स्ट्रिंग्स को आपस में जोड़ दिया। CSV से आने वाला हर मान एक स्ट्रिंग होता है। पहले हर एक को कन्वर्ट करें: total += int(row[subject])।
Q2एक छात्र के साइंस के मार्क्स छूटे हुए हैं (एक खाली सेल)। subject_average को क्या करना चाहिए, और इसे सिर्फ़ 0 क्यों नहीं मान लेना चाहिए?दिखाएं
छूटे हुए मार्क्स को 0 मानने से ऐवरेज गलत तरीके से नीचे गिर जाएगा, जैसे कि छात्र ने कुछ भी स्कोर नहीं किया हो। एक बेहतर नियम यह है कि खाली सेल को छोड़ दिया जाए: सिर्फ़ असली मार्क्स को जोड़ें और जितने असली मार्क्स थे उससे भाग दें। आप जो भी नियम चुनें, उसे लिख लें, क्योंकि इससे नतीजा बदल जाता है।
अक्सर पूछे जाने वाले सवाल
अगर CSV के किसी मान में अंदर ही कॉमा हो, जैसे कोई पता (एड्रेस)?
उचित CSV ऐसे मानों को डबल कोट्स के अंदर रखती है: "12, MG Road"। csv मॉड्यूल इसे अपने आप संभाल लेता है। अपने आप हर लाइन को कॉमा पर बाँटने (split करने) के बजाय इसका उपयोग करने का यह एक कारण है।
csv.reader और csv.DictReader में क्या अंतर है?
csv.reader हर पंक्ति को एक लिस्ट के रूप में देता है, इसलिए आप पोज़ीशन का उपयोग करते हैं: row[1]। csv.DictReader हर पंक्ति को एक डिक्शनरी के रूप में देता है, इसलिए आप नामों का उपयोग करते हैं: row["maths"]। नामों को पढ़ना आसान होता है और अगर कॉलम इधर-उधर हो जाएँ तो भी कोड नहीं बिगड़ता।
मैं खाली सेल को कैसे सँभालूँ?
एक खाली सेल खाली स्ट्रिंग "" के रूप में आता है, और int("") एक एरर देता है। पहले जाँचें, उदाहरण के लिए if row["maths"] != "":, और तय करें कि सही नियम क्या है: इसे छोड़ दें, या इसे मिसिंग (अनुपस्थित) मानें। इसे चुपचाप 0 न मान लें जब तक कि वाकई ऐसा करना सही न हो।
क्या मैं Excel फ़ाइलों को भी इसी तरह पढ़ सकता हूँ?
csv मॉड्यूल से नहीं। सबसे आसान तरीका है कि स्प्रेडशीट ऐप से शीट को CSV के रूप में सेव कर लें। pandas जैसी लाइब्रेरी सीधे Excel फ़ाइलें पढ़ सकती हैं, लेकिन उसके लिए अतिरिक्त पैकेज चाहिए होते हैं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।