Python CSV: czytanie i pisanie arkuszy kalkulacyjnych

Dowiedz się, jak obsługiwać dane CSV w Pythonie. Opanuj programy csv.reader, csv.writer i DictReader/DictWriter w celu wydajnego analizowania tabel.

Spróbuj w Edytorze

Przegląd

CSV (wartości rozdzielane przecinkami) to wszechobecny format eksportowania i importowania danych z arkuszy kalkulacyjnych i relacyjnych baz danych. Ponieważ pliki CSV są prostymi plikami tekstowymi, są powszechnie obsługiwane przez narzędzia analityczne, platformy baz danych i języki programowania. Python posiada wbudowany moduł `csv` zoptymalizowany specjalnie do analizowania, zapisywania i manipulowania danymi tabelarycznymi bez konieczności korzystania z bibliotek innych firm, takich jak pandy.

Moduł csv udostępnia dwa podstawowe interfejsy: czytniki/zapisy oparte na listach i czytniki/zapisy oparte na słownikach. `csv.reader()` i `csv.writer()` reprezentują każdą linię pliku CSV jako listę ciągów znaków, co jest proste, ale wymaga odniesienia do kolumn według ich indeksu liczbowego. Aby uzyskać bardziej niezawodne podejście, programiści używają `csv.DictReader()` i `csv.DictWriter()`. Klasy te mapują każdy wiersz do słownika, używając wiersza nagłówka CSV jako kluczy, tworząc bardzo czytelny kod, który nie psuje się w przypadku zmiany kolejności kolumn.

W przypadku plików CSV ważne są szczegóły składni. Różne programy używają różnych ograniczników (takich jak tabulatory lub średniki) i w różny sposób obsługują cudzysłowy lub zakończenia linii. Moduł `csv` umożliwia definiowanie niestandardowych ograniczników, reguł cytowania i znaków ucieczki za pomocą parametru „dialect”. Dodatkowo podczas otwierania plików CSV w Pythonie krytycznym wymogiem jest przekazanie `newline=''` do funkcji `open()`, aby zapobiec problemom z pustymi liniami w różnych systemach operacyjnych.

Dane wyjściowe kodu i wykonania

Zapisywanie danych do pliku CSV za pomocą DictWriter i odczytywanie ich za pomocą DictReader.

import csv

filename = "employees.csv"
fieldnames = ["id", "name", "department"]
data = [
    {"id": "101", "name": "Bob", "department": "HR"},
    {"id": "102", "name": "Alice", "department": "Engineering"}
]

# Write dict data to CSV
with open(filename, "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

print("CSV written successfully.\n--- Reading CSV ---")

# Read CSV data back as dictionaries
with open(filename, "r", newline="") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Employee {row['name']} works in {row['department']}.")
Wyjście terminala
CSV written successfully.
--- Reading CSV ---
Employee Bob works in HR.
Employee Alice works in Engineering.

Wdrażanie krok po kroku

  • Eksportowanie rekordów arkusza kalkulacyjnego do analizy finansowej
  • Import katalogów list kontaktów do baz danych
  • Formatowanie wyników statystycznych ze skryptów obliczeniowych

Często zadawane pytania

Dlaczego muszę określić newline="" podczas otwierania pliku CSV?

Jest to wymagane przez wewnętrzny moduł zapisujący modułu csv, aby zapobiec wstawianiu dodatkowych pustych linii, szczególnie na platformach Windows.

Jak mogę przeanalizować plik CSV, który używa tabulatorów zamiast przecinków?

Możesz przekazać parametr ogranicznika do czytnika lub programu piszącego, np. csv.reader(file, delimiter='\t').

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.