📁 Unit 1 – File Handling · Lesson 08
CSV Files: reader और writer
CSV file क्या है?
CSV (Comma-Separated Values) plain-text file है जिसमें हर line एक record है और values (fields) commas से अलग होती हैं। Excel और Google Sheets जैसी spreadsheets CSV खोलती और save करती हैं, इसलिए table data share करने का यह सबसे आम तरीका है।
| Roll | Name | Class | Marks |
|---|---|---|---|
| 1 | Asha | XII-A | 91 |
| 2 | Ravi | XII-B | 67 |
| 3 | Neha | XII-A | 85 |
result.csv (text के रूप में)
Roll,Name,Class,Marks 1,Asha,XII-A,91 2,Ravi,XII-B,67 3,Neha,XII-A,85
csv module
✍️
csv.writer(f)writerow() और writerows() वाला writer object देता है।📖
csv.reader(f)Iterator देता है; हर row strings की list।🗂️
csv.DictReader(f)हर row header को keys बनाकर dictionary।लिखना: writer, writerow, writerows
Python
import csv
rows = [['Roll', 'Name', 'Class', 'Marks'],
[1, 'Asha', 'XII-A', 91],
[2, 'Ravi', 'XII-B', 67],
[3, 'Neha', 'XII-A', 85]]
with open('result.csv', 'w', newline='') as f:
w = csv.writer(f)
w.writerow(rows[0]) # header
w.writerows(rows[1:]) # many rows at once
with open('result.csv') as f:
print(f.read(), end='') # it is just textRoll,Name,Class,Marks
1,Asha,XII-A,91
2,Ravi,XII-B,67
3,Neha,XII-A,85
newline='' क्यों?
CSV file लिखने के लिए खोलते समय newline='' दें। नहीं तो Windows पर हर row के बाद ख़ाली line आती है क्योंकि Python और csv module दोनों line endings जोड़ते हैं।
csv.reader से पढ़ना
Python
import csv
with open('result.csv', newline='') as f:
r = csv.reader(f)
for row in r:
print(row) # every row is a LIST of strings['Roll', 'Name', 'Class', 'Marks']
['1', 'Asha', 'XII-A', '91']
['2', 'Ravi', 'XII-B', '67']
['3', 'Neha', 'XII-A', '85']
Row append करना
Python
import csv
def add_student():
with open('result.csv', 'a', newline='') as f:
csv.writer(f).writerow([4, 'Kabir', 'XII-B', 74])
add_student()
with open('result.csv', newline='') as f:
data = list(csv.reader(f))
print('Rows (with header):', len(data), '| last:', data[-1])Rows (with header): 5 | last: ['4', 'Kabir', 'XII-B', '74']
Search, count और filter
Python
import csv
def toppers(limit):
with open('result.csv', newline='') as f:
r = csv.reader(f)
next(r) # skip the header row
count = 0
for roll, name, cls, marks in r:
if int(marks) > limit: # convert text to number
print(name, marks)
count += 1
print('Count:', count)
toppers(80)Asha 91
Neha 85
Count: 2
Python
import csv
def search(name):
with open('result.csv', newline='') as f:
for row in csv.reader(f):
if row[1].lower() == name.lower():
return row
return None
print(search('neha'))
print(search('Zoya'))['3', 'Neha', 'XII-A', '85']
None
Python
import csv
# copy only XII-B students into a new CSV
with open('result.csv', newline='') as src, open('xiib.csv', 'w', newline='') as dst:
r = csv.reader(src)
w = csv.writer(dst)
w.writerow(next(r)) # copy header
for row in r:
if row[2] == 'XII-B':
w.writerow(row)
with open('xiib.csv') as f:
print(f.read(), end='')Roll,Name,Class,Marks
2,Ravi,XII-B,67
4,Kabir,XII-B,74
DictReader
Python
import csv
def class_average(section):
total = n = 0
with open('result.csv', newline='') as f:
for row in csv.DictReader(f): # each row is a dict
if row['Class'] == section:
total += int(row['Marks'])
n += 1
return round(total / n, 2) if n else 0
print('XII-A average:', class_average('XII-A'))
print('XII-B average:', class_average('XII-B'))XII-A average: 88.0
XII-B average: 70.5
दूसरे delimiters
Python
import csv
with open('items.csv', 'w', newline='') as f:
w = csv.writer(f, delimiter=';') # semicolon-separated
w.writerow(['Item', 'Price'])
w.writerow(['Pen, blue', 10]) # comma inside value is safe
with open('items.csv') as f:
print(f.read(), end='')
with open('items.csv', newline='') as f:
print(list(csv.reader(f, delimiter=';')))Item;Price
Pen, blue;10
[['Item', 'Price'], ['Pen, blue', '10']]
csv module delimiter वाली value के चारों ओर अपने आप quotes लगाता है, इसलिए "Pen, blue" एक ही field रहता है।
सारांश और practice
- CSV = comma से अलग text table;
newline=''से खोलें। - csv.writer → writerow / writerows से लिखें; csv.reader से पढ़ें (rows strings की lists)।
next(reader)से header छोड़ें; गणित से पहले numbers बदलें।
✅ Board-style question
ADD() लिखें जो [EmpID, Name, Mobile] लेकर record.csv में जोड़े, और COUNTR() जो file के records (header छोड़कर) गिने।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
writerow() और writerows() में क्या फ़र्क है?
writerow(list) एक row लिखता है। writerows(list_of_lists) एक call में कई rows लिखता है।
CSV file से पढ़े numbers strings क्यों होते हैं?
CSV text format है, इसलिए csv.reader हर value हमेशा string के रूप में देता है। Calculate करने से पहले int() या float() से बदलें।
newline='' क्या करता है?
यह Windows पर rows के बीच extra ख़ाली line आने से रोकता है, क्योंकि csv module अपनी line endings ख़ुद लिखता है।
