Important classes and functions of the CSV module: open(), reader(), writer(), writerows(), DictReader(), DictWriter()

csv નું module ખુલ્લી file ને reader (હરોળ lists તરીકે) કે writer (writerow/writerows) માં વીંટાળે છે, અને Dict ની જોડી સ્થાનને બદલે ખાનાંનાં નામ વાપરે છે, જેમાં newline='' એ એકમાત્ર ગોઠવણનો નિયમ છે.

10 min read · 10 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

એ અલ્પવિરામ જે split() ને તોડે છે

ગયા પાઠના open() થી સજ્જ થઈને, તમે marks.csv જાતે ઉકેલો છો: line.split(','). સુંદર ચાલે છે... હરોળ 40 સુધી:

104,"Patel, Riya",78

નામમાં અલ્પવિરામ છે. તમારું split() ત્રણને બદલે ચાર ટુકડા બનાવે છે, અને score નું ખાનું હવે " Riya" ધરાવે છે.

અવતરણચિહ્નવાળાં ખાનાં, અંદરના અલ્પવિરામ, ભટકેલાં newlines: CSV ના સ્વરૂપને ધારની બાબતો છે, અને હાથે બનાવેલા parsers એ બધા પર મરે છે. Python નું csv module એટલા માટે છે કે તમે ફરી ક્યારેય split(',') ન લખો.

Theory

કોષ્ટકના ટપાલ માટે તાલીમ પામેલો ટપાલી

split() થી CSV વાંચવું એટલે કવર પકડીને દરેક અલ્પવિરામે ફાડવાં, પત્રની અંદરના અલ્પવિરામ પર પણ.

csv નું module એ તાલીમ પામેલો ટપાલી છે: csv.reader દરેક કવર બરાબર ખોલે છે (અવતરણચિહ્નનું માન રાખીને) અને સામગ્રી સુઘડ list તરીકે આપે છે. csv.writer એ જ ટપાલી છે જે તમારી lists ને પાછી માન્ય કવરમાં સીલ કરે છે. Dict ની જોડી આગળ જાય છે: સ્થાનને બદલે ખાનાના નામથી લેબલ થયેલાં કવર.

Theory

reader અને writer, ઔપચારિક રીતે

બંને પહેલેથી ખુલ્લી file ને વીંટાળે છે:

વાંચવું: csv.reader(f) દરેક હરોળ strings ની list તરીકે આપે છે: ['101', 'DBMS', '78']. નોંધો: દરેક મૂલ્ય string છે, સંખ્યાઓ પણ: ગણિત પહેલાં int()/float() થી ફેરવો. Header ની લીટી સામાન્ય પહેલી હરોળ તરીકે આવે છે: next(reader) થી એને કૂદો.

લખવું: csv.writer(f) એ writerow(એક_list) અને writerows(lists ની list) આપે છે.

સ્વરૂપનો એક ખાસ નિયમ: csv માટે files ને `newline=''` સાથે ખોલો, નહીં તો Windows ના વપરાશકારોને દરેક હરોળ પછી ખાલી લીટી મળે છે.

Practical

marks.csv પર ચાર કામદારો

import csv

# READER: rows as lists (strings!)
with open('marks.csv', 'r', newline='') as f:
    reader = csv.reader(f)
    header = next(reader)            # skip the header row
    for row in reader:
        print(row[0], int(row[2]))   # roll, score as a NUMBER

# WRITER: lists back to disk
with open('toppers.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['roll', 'subject', 'score'])          # one row
    writer.writerows([[101, 'DBMS', 88], [103, 'DBMS', 91]])  # many

# DICTREADER: rows as dictionaries, keys from the header
with open('marks.csv', newline='') as f:
    for row in csv.DictReader(f):
        print(row['roll'], row['score'])   # by NAME, not position

# DICTWRITER: dictionaries to disk (fieldnames required)
with open('report.csv', 'w', newline='') as f:
    w = csv.DictWriter(f, fieldnames=['roll', 'score'])
    w.writeheader()                        # do not forget this line
    w.writerows([{'roll': 101, 'score': 88}])

This example runs in Gri-Learn on the web, where you can edit it and see the output.

At a glance

csv નું module એક નજરમાં

કામદારહરોળ કેવી દેખાય છેયાદ રાખો
csv.reader['101', 'DBMS', '78'] (list)બધું strings; next() header કૂદે છે
csv.writerwriterow / writerowsFile ને newline='' સાથે ખોલો
csv.DictReader{'roll': '101', 'score': '78'}Header એ ચાવીઓ બને છે
csv.DictWriterdicts અંદર, fieldnames જોઈએપહેલાં writeheader() બોલાવો

Think first

ગણિત કેમ ભાંગી પડ્યું?

એક student કુલ ગણે છે: for row in csv.reader(f): total = total + row[2]. Python એ TypeError: unsupported operand type(s) આપે છે. CSV સાવ માન્ય છે. Tap કરતાં પહેલાં: row[2] ખરેખર શું છે, અને એક શબ્દનો ઉકેલ શું છે?

Show the answer

row[2] એ string '78' છે, સંખ્યા 78 નહીં: csv.reader દરેક ખાનું લખાણ તરીકે આપે છે, કારણ કે CSV ની files કોઈ પ્રકારની માહિતી વહન કરતી નથી. String ને સંખ્યામાં ઉમેરવું એ જ TypeError છે.

ઉકેલ: int(row[2]) (કે દશાંશ માટે float). ગણિત પહેલાં ફેરવવાની આ ટેવ એ જ પાઠ છે જે એકમ 2 માં SQLite ના .import એ શીખવ્યો હતો: લખાણનાં સ્વરૂપ લખાણ આપે છે; સંખ્યાઓ તમારી જવાબદારી છે.

Quiz

DictReader સાદા reader કરતાં સ્પષ્ટપણે ક્યારે વધુ સારું છે?

  1. જ્યારે CSV ના ખાનાંનો ક્રમ બદલાઈ શકે: row['score'] હજી ચાલે છે, row[2] ચૂપચાપ તૂટે છે
  2. જ્યારે file બહુ મોટી હોય: DictReader વધુ ઝડપી છે
  3. જ્યારે મૂલ્યો strings ને બદલે સંખ્યા તરીકે આવવાં જોઈએ
  4. જ્યારે file માં header ની હરોળ ન હોય
Show the answer

જ્યારે CSV ના ખાનાંનો ક્રમ બદલાઈ શકે: row['score'] હજી ચાલે છે, row[2] ચૂપચાપ તૂટે છે

DictReader દરેક હરોળને header નાં નામ થી ચાવી આપે છે, એટલે ફરી ગોઠવાયેલી કે વિસ્તરેલી CSV (અધ્યાપકે ખાનું ઉમેર્યું) માં row['score'] સાચું રહે છે જ્યારે સ્થાન આધારિત row[2] કોઈ ભૂલ વગર ખોટું ખાનું વાંચવા લાગે છે: સૌથી ખરાબ પ્રકારનો bug. એ વધુ ઝડપી નથી (વિકલ્પ B), મૂલ્યો હજી strings છે (વિકલ્પ C), અને header ની હરોળ ન હોય ત્યાં DictReader બરાબર ખોટું ઓજાર છે (વિકલ્પ D): એ પહેલી data ની હરોળને ચાવીઓ તરીકે ખાઈ જાત.

Watch out

csv module ની ત્રણ લપસણ

લખતી વખતે newline='' ભૂલવું: હરોળ વચ્ચે ખાલી લીટીઓ (જાણીતું Windows નું લક્ષણ, અને પરીક્ષાનું પ્રિય "આ code માં શું ખોટું છે").

DictWriter સાથે writeheader() છોડી દેવું: header વગરની file જે આગળના દરેક DictReader ને તોડે છે.

સાદા reader સાથે header ની હરોળને data તરીકે ગણવી: 'roll' પર int() નિષ્ફળ જાય છે: પહેલાં next(reader) થી એને કૂદો.

Theory

એક સ્વરૂપ, હવે ત્રણ ઓજાર

તમારી પાસે હવે ત્રણ CSV નાં ઓજાર છે: sqlite3 ના shell નું .import/નિકાસ (એકમ 2), Python નું csv module (હરોળે હરોળ નિયંત્રણ, આ પાઠ), અને આગલા પાઠનું pandas નું read_csv (આખી file એક પદાર્થ તરીકે, એક લીટીમાં). એમની વચ્ચે પસંદગી કરવી એ ખરેખરો engineering નો નિર્ણય છે: એક વખતના loads માટે shell, વહેતા હરોળના logic માટે csv module, વિશ્લેષણ માટે pandas. પરીક્ષાઓને Python માં CSV વાંચવાની બે રીત પૂછવાનું ગમે છે: તમારી પાસે હવે બંને છે.

Summary

Key takeaways

  • csv.reader હરોળને STRINGS ની lists તરીકે આપે છે; સંખ્યાઓ int()/float() થી ફેરવો; header ને next() થી કૂદો.
  • csv.writer: writerow(list) અને writerows(lists ની list).
  • DictReader હરોળને header નાં નામથી ચાવી આપે છે: ખાનાંનો ક્રમ બદલાય તો પણ ટકે છે; DictWriter ને fieldnames વત્તા writeheader() જોઈએ.
  • ખાલી લીટીવાળી હરોળ ટાળવા csv ની files ને newline='' સાથે ખોલો (ખાસ કરીને લખતી વખતે).
  • Reader સામે DictReader = સ્થાન આધારિત સામે નામ આધારિત પહોંચ.
  • Memory hook: તાલીમ પામેલો ટપાલી, સ્થાનથી કે લેબલથી કવર.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Python interaction with text and CSV

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Important classes and functions of the CSV module: open(), reader(), writer(), writerows(), DictReader(), DictWriter() · Database Handling using Python · Gri-Learn