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})