csv.DictWriter()¶
CSV-fail ehk andmetega tabel visuaalselt.
Selliseid andmeid aitab palju loetavamaks teha csv.writer()
funktsiooni modifikatsioon csv.DictWriter()
, kus võtmed on pealkirjad, mis võivad omada palju erinevaid väärtusi.
Andmete vormistamine:¶
Kui csv.writer()
eeldab, et andmed on järjendi kujul
ferrari_data = [
['model name', 'tank size (liters)', 'horsepower', 'cost (dollars)']
['Ferrari Daytona', 86, 829, 2226935],
['Ferrari Testarossa', 115, 385, 1355014],
['Ferrari LaFerrari', 86, 949, 3104231]
]
siis csv.DictWriter
tahab andmed sõnastiku kujul
data = [
{'model name': 'Ferrari Daytona', 'tank size (liters)': '86', 'horsepower': '829', 'cost (dollars)': '2226935'},
{'model name': 'Ferrari Testarossa', 'tank size (liters)': '115', 'horsepower': '385', 'cost (dollars)': '1355014'},
{'model name': 'Ferrari LaFerrari', 'tank size (liters)': '86', 'horsepower': '949', 'cost (dollars)': '3104231'},
]
Pealkirjade lisamine:¶
Kui csv.writerow
puhul on asi lihtne, pealkiri lisatakse järjendina nagu ülejäänudki read
writer = csv.writerow(['model name', 'tank size (liters)', 'horsepower','cost (dollars)'])
siis csv.DictWriter()
tahab csv.writeheader
meetodit väljakutsudes ka ilmtingimata näha pealkirjad fieldnames
argumendina-
writer = csv.DictWriter(csvfile, fieldnames=('model name', 'tank size', 'litres', 'horsepower', 'cost (dollars)'))
writer.writeheader()
Sama asi ilusamalt
fieldnames = ['model name', 'tank size', 'litres', 'horsepower', 'cost (dollars)']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
Faili kirjutamine ja lugemine:¶
Ülejäänud read kirjutatakse mõlemal juhul kasutades meetodit writer.writerows(data)
, kus data on meie andmete järjendi nimi. Isegi andmete lugemine on pea sama, peab ainult csv.reader
vahetama csv.DictReader
funktsiooni vastu.
csv.DictWriter() funktsiooni täielik näide:
import csv
data = [
{'model name': 'Ferrari Daytona', 'tank size': '829', 'liters': '86', 'horsepower': '829', 'cost (dollars)': '2226935'},
{'model name': 'Ferrari Testarossa', 'tank size': '115', 'liters': '115', 'horsepower': '385', 'cost (dollars)': '1355014'},
{'model name': 'Ferrari LaFerrari', 'tank size': '949', 'liters': '86', 'horsepower': '949', 'cost (dollars)': '3104231'},
]
with open('ferrari.csv', 'w', newline='') as csvfile:
fieldnames = ['model name', 'tank size', 'litres', 'horsepower', 'cost (dollars)']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
Sõnastiku eelis - vaid valitud võtmete kirjutamine¶
Et mitte kirjutada kõiki võtmed ja nende väärtusi CSV-faili, saab kasutada extrasaction='ignore'
lisaargumenti:
import csv
data = [
{'name': 'Porsche Cayenne', 'top_speed': 152, 'come_out_year': 2002},
{'name': 'Porsche Speedster', 'top_speed': 192, 'come_out_year': 1954},
{'name': 'Porsche Turbo', 'top_speed': 205, 'come_out_year': 1975}
]
fieldnames = ['name', 'top_speed'] # 'come_out_year' jäetakse välja
with open('porsches.csv', mode='w', newline='') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames, extrasaction='ignore')
writer.writeheader()
writer.writerows(data)
Järjenditest sõnastike tegemine zip
funktsiooniga¶
Just zip
funktsioon aitab järjendeid panna sõnastikkudesse, sest kombineerib indeksi järgi vasakult-paremale loetud järjendiread hoopis ülevalt-alla loetavateks ennikuridadeks.
import csv
names = ['McLaren Senna', 'McLaren Speedtail', 'McLaren Elva']
weights = [2641, 3305, 2531]
fuels = ['gasoline', 'battery', 'petrol']
combined_data = zip(names, weights, fuels)
with open('data.csv', 'w', newline='') as file:
fieldnames = ['model_name', 'car_weight', 'fuel_type']
writer = csv.DictWriter(file, fieldnames=fieldnames)
for name, weight, fuel in combined_data:
writer.writerow({'model_name': name, 'car_weight': weight, 'fuel_type': fuel})