Hvordan håndtere CSV -filer i Python

Hvordan håndtere CSV -filer i Python
Denne artikkelen vil dekke en tutorial på håndtering av “CSV” -filer ved hjelp av Python. Begrepet "CSV" står for "komma -separerte verdier" der hver rad eller linje inneholder tekstbaserte verdier avgrenset av komma. I noen tilfeller brukes “Semicolon” ​​også i stedet for "komma" for å skille verdier. Dette gjør imidlertid ikke stor forskjell for å filformere regler, og logikken for å håndtere begge typer separatorer er fortsatt den samme.

CSV -filformat brukes ofte til å opprettholde databaser og regneark. Den første linjen i en CSV -fil brukes ofte til å definere kolonnefelt mens andre gjenværende linjer anses som rader. Denne strukturen lar brukere presentere tabelldata ved hjelp av CSV -filer. CSV -filer kan redigeres i hvilken som helst tekstredigerer. Imidlertid gir applikasjoner som LibreOffice Calc avanserte redigeringsverktøy, sorterer og filterfunksjoner.

Lese data fra CSV -filer ved hjelp av Python

CSV -modulen i Python lar deg lese, skrive og manipulere data lagret i CSV -filer. For å lese en CSV -fil, må du bruke "leser" -metoden fra Pythons "CSV" -modul som er inkludert i Pythons standardbibliotek.

Tenk på at du har en CSV -fil som inneholder følgende data:

Mango, banan, eple, oransje
50,70,30,90

Den første raden i filen definerer hver kolonnekategori, fruktnavn i dette tilfellet. Den andre linjen lagrer verdier under hver kolonne (aksje-i-hånd). Alle disse verdiene er avgrenset av komma. Hvis du skulle åpne denne filen i et regnearkapplikasjon som LibreOffice Calc, ville det se slik ut:

Nå for å lese verdier fra “frukt.CSV ”-fil ved hjelp av Pythons“ CSV ”-modul, må du bruke“ leser ”-metoden i følgende format:

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.leser (fil)
for linje i data_reader:
trykk (linje)

Den første linjen i eksemplet ovenfor importerer “CSV” -modulen. Neste, "med åpen" uttalelse brukes til å åpne en fil som er lagret på harddisken din ("frukt.CSV ”i dette tilfellet). Et nytt "Data_Reader" -objekt opprettes ved å kalle "leser" -metoden fra "CSV" -modulen. Denne "leser" -metoden tar et filnavn som et obligatorisk argument, så referansen til "frukt.CSV ”sendes til det. Deretter kjøres en "for" sløyfe -uttalelse for å skrive ut hver linje fra "fruktene.CSV ”-fil. Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

['50', '70', '30', '90']

Hvis du vil tilordne linjenumre til utdata, kan du bruke "enumerat" -funksjonen som tildeler et nummer til hvert element i en iterable (starter fra 0 med mindre endret).

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.leser (fil)
For indeks, linje i enumerate (data_reader):
trykk (indeks, linje)

"Indeks" -variabelen holder tellingen for hvert element. Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

0 ['Mango', 'Banana', 'Apple', 'Orange']
1 ['50', '70', '30', '90']

Siden den første linjen i en "CSV" -fil vanligvis inneholder kolonneoverskrifter, kan du bruke "enumerate" -funksjonen for å trekke ut disse overskriftene:

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.leser (fil)
For indeks, linje i enumerate (data_reader):
Hvis indeks == 0:
overskrifter = linje
trykk (overskrifter)

"Hvis" -blokken i uttalelsen ovenfor sjekker om indeksen er lik null (første linje i "frukt.CSV ”-fil). Hvis ja, tildeles verdien av "linje" -variabelen til en ny "overskrift" -variabel. Etter å ha kjørt kodeprøven ovenfor, bør du få følgende utdata:

['Mango', 'Banana', 'Apple', 'Orange']

Merk at du kan bruke din egen avgrenser når du ringer “CSV.Leser "-metode ved å bruke et valgfritt" avgrensning "-argument i følgende format:

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.leser (fil, avgrensning = ";")
for linje i data_reader:
trykk (linje)

Siden i en CSV -fil er hver kolonne assosiert med verdier på rad, kan det være lurt å lage et Python “Dictionary” -objekt når du leser data fra en “CSV” -fil. For å gjøre det, må du bruke “DicTreader” -metoden, som vist i koden nedenfor:

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.DicTreader (fil)
for linje i data_reader:
trykk (linje)

Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'

Så nå har du et ordboksobjekt som knytter individuelle kolonner med deres tilsvarende verdier i radene. Dette fungerer bra hvis du bare har en rad. La oss anta at “fruktene.CSV ”-fil inkluderer nå en ekstra rad som spesifiserer hvor mange dager det vil ta for å bestemme frukt å gå til grunne.

Mango, banan, eple, oransje
50,70,30,90
3,1,6,4

Når du har flere rader, vil det å kjøre samme kodeprøve ovenfor gi forskjellige utganger.

'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'
'Mango': '3', 'Banana': '1', 'Apple': '6', 'Orange': '4'

Dette er kanskje ikke ideelt, ettersom du kanskje vil kartlegge alle verdier som gjelder en kolonne til en nøkkelverdipar i en Python-ordbok. Prøv denne kodeprøven i stedet:

Importer CSV
med åpen ("frukt.CSV ") som fil:
Data_Reader = CSV.DicTreader (fil)
data_dict =
for linje i data_reader:
for nøkkel, verdi i kø.elementer ():
data_dict.setDefault (Key, [])
data_dict [nøkkel].vedlegg (verdi)
print (data_dict)

Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

'Mango': ['50', '3'], 'Banana': ['70', '1'], 'Apple': ['30', '6'], 'Orange': ['90 ',' 4 ']

En "for" -sløyfe brukes på hvert element i "dictreader" -objektet for å sløyfe over nøkkelverdipar. En ny Python -ordbokvariabel “Data_dict” er definert før det. Det vil lagre endelige datakart. Under den andre "for" sløyfeblokken brukes Python Dictionarys "setdefault" -metode. Denne metoden tildeler en verdi til en ordboksnøkkel. Hvis nøkkelverdiparet ikke eksisterer, opprettes det en ny fra de spesifiserte argumentene. Så i dette tilfellet vil en ny tom liste bli tildelt en nøkkel hvis den ikke allerede eksisterer. Til slutt er "verdi" lagt til den tilsvarende nøkkelen i det endelige "Data_dict" -objektet.

Skrive data til en CSV -fil

For å skrive data til en "CSV" -fil, må du bruke "skribent" -metoden fra "CSV" -modulen. Eksemplet nedenfor vil legge til en ny rad til de eksisterende "fruktene.CSV ”-fil.

Importer CSV
med åpen ("frukt.CSV "," A ") som fil:
Data_Writer = CSV.forfatter (fil)
data_writer.Writerow ([3,1,6,4])

Den første uttalelsen åpner filen i "vedlegg" -modus, betegnet med argumentet "a". Neste kalles "forfatter" -metoden og referansen til "frukt.CSV ”-filen sendes til den som et argument. "Writerow" -metoden skriver eller legger til en ny rad i filen.

Hvis du vil konvertere Python Dictionary til en "CSV" -filstruktur og lagre utdataene i en "CSV" -fil, kan du prøve denne koden:

Importer CSV
med åpen ("frukt.csv "," w ") som fil:
Overskrifter = ["Mango", "Banana", "Apple", "Orange"]
Data_Writer = CSV.Dictwriter (fil, feltnavn = overskrifter)
data_writer.WritHeader ()
data_writer.Writerow ("Mango": 50, "Banana": 70, "Apple": 30, "Orange": 90)
data_writer.Writerow ("Mango": 3, "Banana": 1, "Apple": 6, "Orange": 4)

Etter å ha åpnet en tom "frukt.CSV ”-filen som bruker en" med åpen "uttalelse, er en ny variabel" overskrifter "definert som inneholder kolonneoverskrifter. Et nytt objekt “Data_Writer” opprettes ved å kalle “Dictwriter” -metoden og sende den referanse til “Fruktene.CSV ”-fil og et" feltnavn "-argument. I neste linje skrives kolonneoverskrifter til filen ved hjelp av metoden “WritHeader”. De to siste uttalelsene legger nye rader til deres tilsvarende overskrifter som er opprettet i forrige trinn.

Konklusjon

CSV -filer gir en fin måte å skrive data i tabellformat. Pythons innebygde “CSV” -modul gjør det enkelt å håndtere data tilgjengelig i “CSV” -filer og implementere ytterligere logikk på den.