0Pricing
Python Academy · Lekcja

Zapisywanie CSV za pomocą csv.DictWriter

Proszę zapisywać ustrukturyzowane dane do CSV za pomocą DictReader i DictWriter.

Zapisywanie CSV za pomocą csv.DictWriter to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Wprowadzenie

csv.writer i csv.DictWriter zapisują dane języka Python w formacie CSV, automatycznie obsługując cudzysłowy i separatory.

Podstawy csv.writer

csv.writer(f).writerow(row) zapisuje pojedynczy wiersz. writerows(rows) zapisuje wiele wierszy.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
writer.writerow(['name', 'age'])
writer.writerow(['Alice', 30])
print(buf.getvalue())

Zachowanie podczas cytowania

Domyślnie pola zawierające przecinki lub cudzysłowy są automatycznie ujmowane w cudzysłowy. quoting=csv.QUOTE_ALL ujmuje w cudzysłowy każde pole.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, quoting=csv.QUOTE_ALL)
writer.writerow(['Alice', 'NYC, NY', 30])
print(buf.getvalue())

csv.DictWriter

DictWriter zapisuje słowniki jako wiersze. Należy określić fieldnames. writeheader() zapisuje nagłówki kolumn.
import csv, io
buf = io.StringIO()
fields = ['name', 'age']
writer = csv.DictWriter(buf, fieldnames=fields)
writer.writeheader()
writer.writerow({'name': 'Alice', 'age': 30})
print(buf.getvalue())

writerows() dla wielu wierszy

writer.writerows(list_of_rows) jest wydajniejsze niż wywoływanie writerow() w pętli.
import csv, io
buf = io.StringIO()
writer = csv.DictWriter(buf, fieldnames=['x','y'])
writer.writeheader()
writer.writerows([{'x':1,'y':2},{'x':3,'y':4}])
print(buf.getvalue())

Niestandardowy separator

csv.writer(f, delimiter='\t') zapisuje wartości rozdzielane tabulatorami (TSV).
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, delimiter='\t')
writer.writerow(['a', 'b', 'c'])
print(repr(buf.getvalue()))

Parametr extrasaction

DictWriter(f, fieldnames, extrasaction='ignore') po cichu ignoruje dodatkowe klucze w słowniku zamiast zgłaszać ValueError.
import csv, io
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name'], extrasaction='ignore')
w.writeheader()
w.writerow({'name': 'Alice', 'extra': 'ignored'})
print(buf.getvalue())

Zapis do rzeczywistego pliku

with open('out.csv','w',newline='',encoding='utf-8') as f: — należy zawsze używać newline='' i określać kodowanie.
import csv, tempfile, os
tmp = tempfile.mktemp(suffix='.csv')
with open(tmp, 'w', newline='') as f:
    csv.writer(f).writerows([[1,2],[3,4]])
print(open(tmp).read())
os.unlink(tmp)

Dopisywanie do pliku CSV

open(file, 'a') dopisuje dane. Należy uważać, aby podczas dopisywania nie zapisać nagłówka ponownie.
import csv, io
buf = io.StringIO()
w = csv.writer(buf)
w.writerow(['x', 'y'])
print(buf.getvalue())

Strumieniowy zapis dużych ilości danych

Należy zapisywać wiersz po wierszu — nie gromadzić wszystkich wierszy w pamięci przed rozpoczęciem zapisu.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
for i in range(5):
    writer.writerow([i, i**2])
print(buf.getvalue())

Test pełnego obiegu

Należy zapisać dane do pliku CSV, a następnie odczytać je ponownie, aby sprawdzić poprawność.
import csv, io
original = [{'name':'Alice','age':'30'},{'name':'Bob','age':'25'}]
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name','age'])
w.writeheader()
w.writerows(original)
buf.seek(0)
read_back = list(csv.DictReader(buf))
print(read_back == original)

Szybkie sprawdzenie

Która metoda DictWriter zapisuje nazwy kolumn jako pierwszy wiersz?

Podsumowanie

csv.writer: writerow/writerows. DictWriter: writeheader + writerow/writerows. Plik należy zawsze otwierać z newline=''. W przypadku elastycznych słowników należy używać extrasaction='ignore'.

Kontynuuj naukę

Tak trzymać! Proszę przejść do następnej lekcji.

Często zadawane pytania

Czy lekcja „Zapisywanie CSV za pomocą csv.DictWriter” jest bezpłatna?

Tak — pełny tekst „Zapisywanie CSV za pomocą csv.DictWriter” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zapisywanie CSV za pomocą csv.DictWriter”?

Proszę zapisywać ustrukturyzowane dane do CSV za pomocą DictReader i DictWriter. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Zapisywanie CSV za pomocą csv.DictWriter”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kodowanie i dekodowanie JSON
  2. Praca z zagnieżdżonymi strukturami JSON
  3. Odczytywanie CSV za pomocą csv.reader
  4. Zapisywanie CSV za pomocą csv.DictWriter
← Powrót do Python Academy