Jak czytać i analizować plik CSV w Pythonie

Dowiedz się, jak czytać i analizować pliki CSV w Pythonie, korzystając z wbudowanego modułu CSV. Opanuj czytanie jako listy, czytniki słowników i niestandardowe ograniczniki.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

CSV (wartości rozdzielane przecinkami) to wszechobecny format plików do przechowywania tabelarycznych zbiorów danych. Niezależnie od tego, czy importujesz bazy danych, eksportujesz arkusze kalkulacyjne, czy pobierasz dzienniki, czytanie plików CSV jest podstawową umiejętnością. Python zawiera dedykowany, wysoce zoptymalizowany wbudowany moduł `csv`, który umożliwia łatwe analizowanie plików CSV bez konieczności korzystania z bibliotek innych firm, takich jak pandy.

Funkcja `csv.reader` odczytuje plik linia po linii i analizuje go, dzieląc każdy wiersz przecinkiem i zwracając listę ciągów. Jeśli plik CSV zawiera wiersz nagłówka (np. etykiety kolumn), często preferowane jest użycie `csv.DictReader`. Automatycznie analizuje każdy wiersz w słowniku, którego kluczami są etykiety kolumn, dzięki czemu kod jest znacznie bardziej czytelny i odporny na zmiany w kolejności kolumn.

Podczas otwierania plików CSV najlepszą praktyką jest ustawienie `newline=""` w instrukcji `open()`. Uniemożliwia to Pythonowi wykonywanie automatycznych tłumaczeń nowej linii, co może prowadzić do błędów analizy w niektórych systemach operacyjnych. Dodatkowo zawsze określaj `encoding="utf-8"` do obsługi znaków specjalnych.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje zapisanie przykładowego pliku CSV i odczytanie go przy użyciu zarówno csv.reader, jak i csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Wyjście terminala
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

Wdrażanie krok po kroku

  • Zaimportuj wbudowany moduł CSV do swojego skryptu.
  • Otwórz plik CSV, używając open("employees.csv", "r", newline="", encoding="utf-8") jako pliku.
  • Przekaż obiekt pliku do csv.reader(file), aby przeanalizować wiersze pliku jako listy ciągów znaków.
  • Użyj csv.DictReader(file) do analizowania wierszy jako mapowań słownikowych odpowiadających nagłówkom kolumn.

Często zadawane pytania

Dlaczego powinienem ustawić newline="" podczas otwierania pliku CSV?

Ustawienie newline="" uniemożliwia Pythonowi dynamiczne modyfikowanie znaków końca linii, zapewniając, że moduł csv będzie mógł poprawnie analizować znaki nowej linii w stylu CSV w różnych systemach operacyjnych.

Jak przeanalizować plik CSV, w którym zamiast przecinków używane są tabulatory lub średniki?

Możesz przekazać niestandardowy ogranicznik do funkcji czytnika: csv.reader(file, delimiter="\t") lub csv.reader(file, delimiter=";").

Powiązane tematy

Polecane zasoby Pythona

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