W Go, praca z plikami CSV (Comma Separated Values) jest powszechnym zadaniem. CSV to prosty format pliku, w którym dane tabelaryczne są przechowywane w postaci tekstu, z wartościami oddzielonymi przecinkami (lub innym separatorem).
Wprowadzenie do pakietu csv
Biblioteka standardowa Go zawiera pakiet csv, który ułatwia odczytywanie i zapisywanie plików CSV. W tym artykule skupimy się na odczytywaniu linii z pliku CSV przy użyciu tego pakietu. Pakiet csv dostarcza funkcji i typów danych, które pozwalają na parsowanie pliku CSV i dostęp do poszczególnych pól danych w każdej linii.
Podstawowe kroki odczytywania linii CSV
Proces odczytywania linii z pliku CSV w Go obejmuje kilka kroków:
- Otwarcie pliku CSV.
- Utworzenie nowego czytnika CSV.
- Iterowanie po liniach pliku CSV i odczytywanie danych.
- Obsługa potencjalnych błędów.
- Zamknięcie pliku.
Przykład kodu
Oto przykład kodu ilustrujący, jak odczytywać linie z pliku CSV:
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"os"
)
func main() {
// 1. Otwarcie pliku CSV.
file, err := os.Open("data.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 2. Utworzenie nowego czytnika CSV.
reader := csv.NewReader(file)
// Konfiguracja czytnika (opcjonalna).
reader.Comma = ';' // Separator (domyślnie przecinek)
reader.Comment = '#' // Znak komentarza (domyślnie brak)
// 3. Iterowanie po liniach pliku CSV i odczytywanie danych.
for {
// Odczyt pojedynczej linii.
record, err := reader.Read()
if err == io.EOF {
break // Koniec pliku
}
if err != nil {
log.Fatal(err)
}
// Wyświetlenie odczytanych danych.
fmt.Println(record)
}
}
W tym przykładzie:
os.Open("data.csv")
otwiera plik o nazwie "data.csv".csv.NewReader(file)
tworzy nowy czytnik CSV, który będzie przetwarzał zawartość pliku.reader.Comma = ';'
ustawia separator na średnik, jeśli plik używa średników zamiast przecinków.- Pętla
for
iteruje po liniach pliku, używającreader.Read()
do odczytania każdej linii jako slice stringów. io.EOF
(End Of File) jest sprawdzane, aby zatrzymać pętlę, gdy osiągnięty zostanie koniec pliku.fmt.Println(record)
wypisuje odczytane dane (slice stringów) do konsoli.defer file.Close()
zapewnia, że plik zostanie zamknięty po zakończeniu działania funkcji.
Obsługa błędów
Podczas pracy z plikami CSV ważne jest, aby odpowiednio obsługiwać potencjalne błędy. Na przykład, plik może nie istnieć, może być uszkodzony, lub może zawierać nieprawidłowy format CSV. W przykładzie powyżej użyto log.Fatal(err)
do wypisania błędu i zakończenia programu, ale w bardziej zaawansowanych aplikacjach można implementować bardziej szczegółową obsługę błędów.
Konfiguracja czytnika CSV
Pakiet csv oferuje różne opcje konfiguracyjne dla czytnika, w tym:
- Comma: Określa znak używany jako separator pól (domyślnie przecinek).
- Comment: Określa znak używany do oznaczania linii komentarzy (domyślnie brak).
- FieldsPerRecord: Określa oczekiwaną liczbę pól w każdym rekordzie. Jeśli ustawiona na wartość ujemną, liczba pól jest określana na podstawie pierwszego rekordu.
- TrimLeadingSpace: Jeśli ustawione na true, wiodące spacje są usuwane z każdego pola.
- LazyQuotes: Jeśli ustawione na true, dopuszcza znaki cudzysłowu w polach, które nie są w całości otoczone cudzysłowami.
Przykład użycia opcji Comma
:
reader.Comma = ';' // Używaj średnika jako separatora.
Praktyczne zastosowania
Odczytywanie plików CSV jest używane w wielu zastosowaniach, takich jak:
- Importowanie danych do baz danych.
- Przetwarzanie danych finansowych.
- Analiza danych z plików dziennika.
- Wczytywanie konfiguracji aplikacji.
Podsumowanie
Pakiet csv w Go oferuje prosty i wydajny sposób odczytywania linii z plików CSV. Dzięki możliwości konfigurowania czytnika CSV można dostosować proces odczytu do specyficznych wymagań różnych formatów plików CSV. Pamiętaj o odpowiedniej obsłudze błędów, aby zapewnić stabilność i niezawodność Twojej aplikacji.

