Python

Hvordan håndtere CSV-filer i Python

Hvordan håndtere CSV-filer i Python
Denne artikkelen vil dekke en veiledning om håndtering av "csv" -filer ved hjelp av Python. Begrepet "csv" står for "kommaadskilte verdier" der hver rad eller linje inneholder tekstbaserte verdier avgrenset av komma. I noen tilfeller brukes også "semikolon" i stedet for "komma" for å skille verdier. Dette gjør imidlertid ikke så stor forskjell for filformatreglene, og logikken for å håndtere begge typer separatorer forblir den samme.

CSV-filformat brukes oftest til å vedlikeholde databaser og regneark. Den første linjen i en CSV-fil brukes oftest til å definere kolonnefelt mens andre gjenværende linjer regnes som rader. Denne strukturen lar brukerne 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, sorterings- og filterfunksjoner.

Lese data fra CSV-filer ved hjelp av Python

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

Vurder at du har en CSV-fil som inneholder følgende data:

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

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

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

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.leser (fil)
for linje i data_leser:
skriv ut (linje)

Den første linjen i eksemplet ovenfor importerer "csv" -modulen. Deretter brukes "med åpen" uttalelse for å trygt åpne en fil som er lagret på harddisken din ("fruits.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 ”blir sendt til den. Deretter kjøres en "for" -løkkeerklæring for å skrive ut hver linje fra "fruktene.csv ”-fil. Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata:

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

Hvis du vil tilordne linjenumre som skal sendes ut, kan du bruke funksjonen "oppregne" som tildeler et nummer til hvert element i en iterabel (fra 0 med mindre det er endret).

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.leser (fil)
for indeks, linje i enumerate (data_reader):
skriv ut (indeks, linje)

“Indeks” -variabelen holder antall for hvert element. Etter å ha kjørt kodeeksemplet nevnt ovenfor, 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 til å trekke ut disse overskriftene:

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.leser (fil)
for indeks, linje i enumerate (data_reader):
hvis indeks == 0:
overskrifter = linje
trykk (overskrifter)

"Hvis" -blokken i utsagnet ovenfor sjekker om indeksen er lik null (første linje i "frukt.csv-fil). Hvis ja, tildeles verdien av "linje" -variabelen til en ny "overskrifter" -variabel. Etter at du har kjørt kodeeksemplet ovenfor, bør du få følgende utdata:

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

Vær oppmerksom på at du kan bruke din egen skilletegn når du ringer “csv.leser-metoden ved å bruke et valgfritt "skilletegn" -argument i følgende format:

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.leser (fil, skilletegn = ";")
for linje i data_leser:
skriv ut (linje)

Siden hver kolonne er knyttet til verdier i en csv-fil, kan det være lurt å lage et Python-ordbokobjekt når du leser data fra en csv-fil. For å gjøre dette må du bruke “DictReader” -metoden, som vist i koden nedenfor:

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.DictReader (fil)
for linje i data_leser:
skriv ut (linje)

Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata:

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

Så nå har du et ordbokobjekt 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-filen inneholder nå en ekstra rad som spesifiserer hvor mange dager det vil ta før fruktmassen går til grunne.

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

Når du har flere rader, vil det å kjøre samme kodeeksempel ovenfor gi forskjellige utdata.

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

Dette er kanskje ikke ideelt, ettersom det kan være lurt å kartlegge alle verdiene knyttet til en kolonne til ett nøkkelverdipar i en Python-ordbok. Prøv dette kodeeksemplet i stedet:

importere csv
med åpen ("frukt.csv ") som fil:
data_leser = csv.DictReader (fil)
data_dict =
for linje i data_leser:
for nøkkel, verdi i linje.gjenstander ():
data_dict.setdefault (nøkkel, [])
data_dict [nøkkel].legge til (verdi)
skriv ut (data_dict)

Etter å ha kjørt kodeeksemplet nevnt ovenfor, 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 å gå over nøkkelverdipar. En ny Python-ordbokvariabel “data_dict” er definert før det. Den lagrer endelige datakartlegginger. Under den andre "for" loop-blokken brukes Python-ordbokens "setdefault" -metode. Denne metoden tildeler en ordboknøkkel en verdi. Hvis nøkkelverdiparet ikke eksisterer, opprettes en ny fra de angitte argumentene. Så i dette tilfellet vil en ny tom liste bli tildelt en nøkkel hvis den ikke allerede eksisterer. Til slutt legges "verdi" 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 "Writer" -metoden fra "csv" -modulen. Eksemplet nedenfor vil legge til en ny rad til de eksisterende “fruktene.csv ”-fil.

importere csv
med åpen ("frukt.csv "," a ") som fil:
data_writer = csv.skribent (fil)
data_writer.writerow ([3,1,6,4])

Den første setningen åpner filen i "legg til" -modus, betegnet med argumentet "a". Deretter kalles "skribent" -metoden og henvisningen til "frukt.csv ”-fil blir sendt til den som et argument. Metoden “writerow” skriver eller legger til en ny rad i filen.

Hvis du vil konvertere Python-ordbok til en "csv" -struktur og lagre utdataene i en "csv" -fil, kan du prøve denne koden:

importere csv
med åpen ("frukt.csv "," w ") som fil:
headings = ["Mango", "Banana", "Apple", "Orange"]
data_writer = csv.DictWriter (fil, feltnavn = overskrifter)
data_writer.skrivehode ()
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 ”-fil ved hjelp av en“ med åpen ”uttalelse, defineres en ny variabel“ headings ”som inneholder kolonneoverskrifter. Et nytt objekt "data_writer" er opprettet ved å kalle "DictWriter" -metoden og gi den referanse til "fruktene.csv-fil og et "feltnavn" -argument. I neste linje skrives kolonneoverskrifter til filen ved å bruke "skrivehode" -metoden. De to siste setningene legger til nye rader i de tilsvarende overskriftene som ble 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 videre logikk på den.

Kjemp om Wesnoth-opplæringen
Kampen om Wesnoth er et av de mest populære open source-strategispillene du kan spille på dette tidspunktet. Ikke bare har dette spillet vært i utvikl...
0 A.D. Opplæringen
Ut av de mange strategispillene der ute, 0 A.D. klarer å skille seg ut som en omfattende tittel og et veldig dypt, taktisk spill til tross for å være ...
Unity3D opplæring
Introduksjon til Unity 3D Unity 3D er en kraftig spillutviklingsmotor. Det er kryssplattform, det er det lar deg lage spill for mobil, web, stasjonær ...