Python

Kā rīkoties ar CSV failiem Python

Kā rīkoties ar CSV failiem Python
Šajā rakstā būs aprakstīta apmācība par “csv” failu apstrādi, izmantojot Python. Termins “csv” nozīmē “atdalītas ar komatu vērtības”, kur katrā rindā vai rindā ir ar komatu norobežotas teksta vērtības. Dažos gadījumos vērtību atdalīšanai “komata” vietā tiek izmantots arī “semikols”. Tomēr faila formāta kārtulām nav lielas atšķirības, un loģika, kas attiecas uz abiem atdalītāju veidiem, paliek nemainīga.

CSV faila formātu visbiežāk izmanto datu bāzu un izklājlapu uzturēšanai. Pirmo rindu CSV failā visbiežāk izmanto kolonnu lauku definēšanai, bet visas pārējās atlikušās rindas tiek uzskatītas par rindām. Šī struktūra ļauj lietotājiem uzrādīt tabulas datus, izmantojot CSV failus. CSV failus var rediģēt jebkurā teksta redaktorā. Tomēr tādas lietojumprogrammas kā LibreOffice Calc nodrošina uzlabotus rediģēšanas rīkus, kārtošanas un filtrēšanas funkcijas.

Datu lasīšana no CSV failiem, izmantojot Python

CSV modulis Python ļauj lasīt, rakstīt un manipulēt ar visiem CSV failos saglabātajiem datiem. Lai lasītu CSV failu, jums būs jāizmanto metode “lasītājs” no Python “csv” moduļa, kas ir iekļauta Python standarta bibliotēkā.

Uzskatiet, ka jums ir CSV fails, kurā ir šādi dati:

Mango, banāns, ābols, apelsīns
50,70,30,90

Faila pirmajā rindā ir definēta katra kolonnu kategorija, šajā gadījumā augļu nosaukums. Otrajā rindiņā vērtības tiek glabātas zem katras kolonnas (krājums rokā). Visas šīs vērtības ir atdalītas ar komatu. Ja atvērtu šo failu izklājlapas lietojumprogrammā, piemēram, LibreOffice Calc, tas izskatās šādi:

Tagad, lai lasītu vērtības no “augļiem.csv ”failu, izmantojot Python modeli“ csv ”, jums būs jāizmanto“ lasītāja ”metode šādā formātā:

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.lasītājs (fails)
līnijai data_reader:
izdruka (līnija)

Iepriekšējā parauga pirmajā rindiņā tiek importēts “csv” modulis. Pēc tam paziņojums “ar atvērtu” tiek izmantots, lai droši atvērtu cietajā diskā saglabāto failu (“augļi.csv ”(šajā gadījumā). Jauns objekts “data_reader” tiek izveidots, izsaucot metodi “lasītājs” no moduļa “csv”. Šī “lasītāja” metode kā obligātu argumentu ņem faila nosaukumu, tāpēc atsauce uz “augļi.csv ”tiek nodota tai. Pēc tam tiek palaists cikla priekšraksts “par”, lai izdrukātu katru rindiņu no “augļiem”.csv ”fails. Pēc iepriekš minētā koda parauga palaišanas jums jāiegūst šāda izeja:

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

Ja vēlaties piešķirt rindas numurus izvadei, varat izmantot funkciju “uzskaitīt”, kas piešķir katram skaitam iterējamā vienuma numuru (sākot no 0, ja vien tas nav mainīts).

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.lasītājs (fails)
indeksam, rinda uzskaitījumā (data_reader):
drukāt (rādītājs, līnija)

Mainīgais “index” saglabā katra elementa skaitu. Pēc iepriekš minētā koda parauga palaišanas jums jāiegūst šāda izeja:

0 ['Mango', 'Banāns', 'Ābols', 'Apelsīns']
1 ['50', '70', '30', '90']

Tā kā faila “csv” pirmajā rindiņā parasti ir kolonnu virsraksti, šo virsrakstu izgūšanai varat izmantot funkciju “uzskaitīt”:

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.lasītājs (fails)
indeksam, rinda uzskaitījumā (data_reader):
ja indekss == 0:
virsraksti = rinda
drukāt (virsraksti)

Bloks “ja” iepriekšminētajā paziņojumā pārbauda, ​​vai indekss ir vienāds ar nulli (pirmā rinda “augļos.csv ”fails). Ja jā, tad mainīgā “line” vērtība tiek piešķirta jaunam “headings” mainīgajam. Pēc iepriekš minētā koda parauga palaišanas jums jāiegūst šāda izeja:

['Mango', 'Banāns', 'Ābols', 'Apelsīns']

Ņemiet vērā, ka, izsaucot “csv, varat izmantot savu atdalītāju.lasītājs ”metodi, izmantojot izvēles argumentu“ norobežotājs ”šādā formātā:

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.lasītājs (fails, norobežotājs = ";")
līnijai data_reader:
druka (līnija)

Tā kā csv failā katra kolonna ir saistīta ar vērtībām pēc kārtas, iespējams, vēlēsities izveidot objektu Python “vārdnīca”, lasot datus no “csv” faila. Lai to izdarītu, jums jāizmanto metode “DictReader”, kā parādīts zemāk esošajā kodā:

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.DictReader (fails)
līnijai data_reader:
izdruka (līnija)

Pēc iepriekš minētā koda parauga palaišanas jums jāiegūst šāda izeja:

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

Tātad tagad jums ir vārdnīcas objekts, kas atsevišķas kolonnas saista ar tām atbilstošajām vērtībām rindās. Tas darbojas lieliski, ja jums ir tikai viena rinda. Pieņemsim, ka “augļi.csv ”failā tagad ir iekļauta papildu rinda, kas norāda, cik dienas būs nepieciešamas, lai augļu krājumi pazustu.

Mango, banāns, ābols, apelsīns
50,70,30,90
3,1,6,4

Ja jums ir vairākas rindas, izpildot vienu un to pašu koda paraugu iepriekš, tiks iegūta atšķirīga izeja.

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

Tas, iespējams, nav ideāli, jo visas Python vārdnīcas vērtības, kas attiecas uz vienu kolonnu, varat kartēt ar vienu atslēgas-vērtību pāri. Tā vietā izmēģiniet šo koda paraugu:

importēt csv
ar atvērtiem ("augļi.csv ") kā fails:
data_reader = csv.DictReader (fails)
data_dict =
līnijai data_reader:
atslēgai vērtība rindā.preces ():
data_dict.setdefault (atslēga, [])
data_dict [atslēga].pievienot (vērtība)
drukāt (data_dict)

Pēc iepriekš minētā koda parauga palaišanas jums jāiegūst šāda izeja:

'Mango': ['50', '3'], 'Banāns': ['70', '1'], 'Apple': ['30', '6'], 'Oranžs': ['90 ',' 4 ']

Cilpa “par” tiek izmantota katram objekta “DictReader” elementam, lai cilpa pāri atslēgu un vērtību pāriem. Pirms tam ir definēts jauns Python vārdnīcas mainīgais “data_dict”. Tajā tiks glabāti galīgie datu kartējumi. Otrajā cilpas blokā “for” tiek izmantota Python vārdnīcas metode “setdefault”. Šī metode vārdnīcas atslēgai piešķir vērtību. Ja atslēgu un vērtību pāris nepastāv, no norādītajiem argumentiem tiek izveidots jauns. Tātad šajā gadījumā atslēgai tiks piešķirts jauns tukšs saraksts, ja tas vēl nepastāv. Visbeidzot, “vērtība” tiek pievienota atbilstošajai atslēgai galīgajā objektā “data_dict”.

Datu rakstīšana CSV failā

Lai ierakstītu datus “csv” failā, jums būs jāizmanto “rakstītāja” metode no “csv” moduļa. Tālāk sniegtajā piemērā esošajām “augļiem” tiks pievienota jauna rinda.csv ”fails.

importēt csv
ar atvērtiem ("augļi.csv "," a ") kā fails:
data_writer = csv.rakstnieks (fails)
datu rakstītājs.authorow ([3,1,6,4])

Ar pirmo paziņojumu fails tiek atvērts režīmā “pievienot”, ko apzīmē ar argumentu “a”. Tālāk tiek saukta “rakstnieka” metode un atsauce uz “augļiem.csv ”fails tiek nodots tam kā arguments. Metode “writerow” failā ieraksta vai pievieno jaunu rindu.

Ja vēlaties pārveidot Python vārdnīcu par “csv” faila struktūru un saglabāt izvadi “csv” failā, izmēģiniet šo kodu:

importēt csv
ar atvērtiem ("augļi.csv "," w ") kā fails:
virsraksti = ["Mango", "Banāns", "Ābols", "Apelsīns"]
data_writer = csv.DictWriter (fails, lauka nosaukumi = virsraksti)
datu rakstītājs.rakstīšanas virsraksts ()
datu rakstītājs.writerow ("Mango": 50, "Banāns": 70, "Ābols": 30, "Apelsīns": 90)
datu rakstītājs.writerow ("Mango": 3, "Banāns": 1, "Ābols": 6, "Apelsīns": 4)

Pēc tukša atvēršanas “augļi.csv ”failā, izmantojot“ ar atvērtu ”priekšrakstu, tiek definēts jauns mainīgais“ virsraksti ”, kas satur kolonnu virsrakstus. Jauns objekts “data_writer” tiek izveidots, izsaucot metodi “DictWriter” un nododot tam atsauci uz “augļiem”.csv ”fails un arguments“ fieldnames ”. Nākamajā rindā kolonnu virsraksti tiek ierakstīti failā, izmantojot metodi “writeheader”. Pēdējie divi priekšraksti attiecīgajām virsrakstiem, kas izveidoti iepriekšējā solī, pievieno jaunas rindas.

Secinājums

CSV faili nodrošina ērtu veidu, kā rakstīt datus tabulas formātā. Python iebūvētais “csv” modulis ļauj ērti apstrādāt “csv” failos pieejamos datus un ieviest tajā papildu loģiku.

Kā izmantot Xdotool, lai stimulētu peles klikšķus un taustiņsitienus Linux
Xdotool ir bezmaksas un atvērtā koda komandrindas rīks peles klikšķu un taustiņu simulāciju simulēšanai. Šajā rakstā būs īss ceļvedis par xdotool izma...
5 labākie ergonomiskie datoru peles izstrādājumi Linux
Vai ilgstoša datora lietošana izraisa sāpes plaukstas locītavā vai pirkstos? Vai jūs ciešat no stīvām locītavām un jums pastāvīgi ir jāspiež rokas? Va...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...