Formatowanie CSV (Comma-Separated Values) to proces normalizacji surowego tekstu tabelarycznego tak, aby separatory, cudzysłowy, białe znaki i zakończenia wierszy były zgodne ze spójnym zestawem reguł. RFC 4180, opublikowany w 2005 roku, definiuje najszerzej stosowany standard CSV: pola oddzielone przecinkami, rekordy zakończone CRLF, a każde pole zawierające przecinek, cudzysłów lub znak nowej linii ujęte w cudzysłowy. Formater CSV pobiera nieuporządkowane lub niespójne dane CSV i przepisuje je zgodnie z tymi konwencjami.
Pliki CSV z rzeczywistych źródeł rzadko są dostępne w czystej postaci. Eksporty arkuszy kalkulacyjnych z Excela, Google Sheets i narzędzi do zrzutu baz danych stosują różne strategie cytowania, odmiennie obsługują białe znaki i mogą używać średników lub tabulatorów zamiast przecinków. Gdy takie pliki trafiają do parsera oczekującego ścisłego wejścia RFC 4180, wynikiem są często uszkodzone wiersze, przesunięte kolumny lub ciche utracenie danych. Formatowanie przed przetwarzaniem pozwala wykryć te problemy na wczesnym etapie.
Formater CSV różni się od konwertera CSV. Formatowanie pozostawia dane w formacie CSV — normalizuje cudzysłowy, przycina zbędne białe znaki, wyrównuje kolumny i opcjonalnie zmienia separator. Konwersja całkowicie zmienia format, produkując dane wyjściowe jako JSON, HTML, SQL lub Markdown.
Dlaczego warto używać tego formatera CSV?
Narzędzie parsuje i ponownie serializuje dane CSV w całości w przeglądarce. Twoje dane nigdy nie opuszczają urządzenia.
⚡
Natychmiastowe formatowanie
Wklej CSV i natychmiast zobacz oczyszczone dane wyjściowe. Formater parsuje i ponownie serializuje w przeglądarce podczas pisania.
🔒
Przetwarzanie z priorytetem prywatności
Całe parsowanie i formatowanie odbywa się w karcie przeglądarki. Żadne dane nie są przesyłane przez sieć. Bezpieczne dla zastrzeżonych zbiorów danych, danych uwierzytelniających i PII, które nie mogą opuścić urządzenia.
🔧
Konfigurowalne separatory
Przełączaj między separatorami: przecinek, tabulator, średnik i pionowa kreska. Narzędzie automatycznie wykrywa separator wejściowy i pozwala wybrać inny dla danych wyjściowych, co upraszcza normalizację między formatami.
📋
Kopiowanie i pobieranie jednym kliknięciem
Skopiuj sformatowany CSV do schowka lub pobierz jako plik. Gotowe do importu do baz danych, arkuszy kalkulacyjnych lub potoków danych bez dodatkowej edycji.
Zastosowania formatera CSV
Programowanie frontendowe
Oczyść pliki CSV używane jako dane testowe w komponentach React lub Vue. Spójne cytowanie zapobiega błędom parsowania podczas kompilacji deweloperskich.
Przetwarzanie danych w backendzie
Normalizuj eksporty CSV z zewnętrznych API przed wprowadzeniem ich do potoku ETL. Przycinanie białych znaków i standaryzacja separatorów zapobiega błędom przesunięcia kolumn.
DevOps i CI/CD
Formatuj pliki konfiguracyjne CSV lub dane inicjalizacyjne przechowywane w systemie kontroli wersji. Spójne formatowanie zmniejsza szum w diffach i przyspiesza przeglądy kodu.
QA i testowanie
Przygotuj fixture CSV z określonymi wzorcami cytowania i separatorów. Powtarzalne pliki wejściowe ułatwiają pisanie asercji dla danych wyjściowych parsera.
Inżynieria danych
Przetwarzaj wstępnie zrzuty CSV ze starszych baz danych przed załadowaniem ich do nowoczesnych hurtowni danych. Naprawianie problemów z cytowaniem i niezgodności separatorów oszczędza godziny debugowania.
Nauka i edukacja
Eksperymentuj z regułami cytowania RFC 4180, wklejając różne dane wejściowe i obserwując, jak formater je normalizuje. Praktyczny sposób na zrozumienie przypadków brzegowych CSV.
Zasady cytowania i ucieczki w CSV (RFC 4180)
RFC 4180 definiuje konkretne zasady dotyczące tego, kiedy i jak pola muszą być cytowane. Sześć scenariuszy poniżej obejmuje przypadki, w których sposób cytowania ma znaczenie.
Scenariusz
Przykład
Zasada
Field contains delimiter
name,"Smith, Jr."
Wrap in double quotes
Field contains newline
"line1\nline2"
Wrap in double quotes
Field contains double quote
"She said ""hello"""
Double the quote character
Field is empty
,,
Two consecutive delimiters
Field has leading spaces
" value"
Quotes preserve whitespace
Field is numeric
42
No quotes required unless forced
Porównanie separatorów CSV
Wybór separatora wpływa na kompatybilność, czytelność i częstotliwość, z jaką będziesz potrzebować cytowanych pól.
Przecinek (,)
Domyślny separator RFC 4180. Obsługiwany przez każdy parser CSV i arkusz kalkulacyjny. Wymaga cytowania, gdy wartości pól zawierają przecinki, co jest powszechne w danych adresowych i tekstowych.
Tabulator (\t)
Używany w plikach TSV (Tab-Separated Values). Znaki tabulatora rzadko pojawiają się w danych pól, więc cytowanie jest rzadko potrzebne. Powszechny w bioinformatyce i eksportach baz danych.
Średnik (;)
Standard w europejskich eksportach CSV (Niemcy, Francja, Brazylia), gdzie przecinek jest używany jako separator dziesiętny. Excel używa średników, gdy lokalne ustawienia systemowe stosują przecinek jako separator dziesiętny.
Pionowa kreska (|)
Rzadko pojawia się w naturalnym tekście, co czyni ją dobrym wyborem dla nieuporządkowanych danych, gdzie przecinki i średniki występują w wartościach pól. Powszechna w eksportach z systemów mainframe i starszych systemów.
Przykłady kodu
Te przykłady pokazują, jak parsować nieuporządkowany CSV i ponownie go serializować ze spójnym formatowaniem w różnych językach programowania. Każdy fragment obsługuje przycinanie białych znaków, normalizację separatorów i cytowanie.
JavaScript (Node.js)
import { parse, unparse } from 'papaparse'
const messy = `name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo "`
// Parse with trimming, then re-serialize with consistent formatting
const parsed = parse(messy, {
header: true,
skipEmptyLines: true,
transformHeader: h => h.trim(),
transform: v => v.trim(),
})
const clean = unparse(parsed.data, { quotes: true })
console.log(clean)
// → "name","age","city"
// → "Alice","30","Berlin"
// → "Bob","25","Tokyo"
Python
import csv
import io
messy = """name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo " """
reader = csv.DictReader(io.StringIO(messy), skipinitialspace=True)
output = io.StringIO()
writer = csv.DictWriter(
output,
fieldnames=[f.strip() for f in reader.fieldnames],
quoting=csv.QUOTE_ALL,
)
writer.writeheader()
for row in reader:
writer.writerow({k.strip(): v.strip() for k, v in row.items()})
print(output.getvalue())
# → "name","age","city"
# → "Alice","30","Berlin"
# → "Bob","25","Tokyo"
Go
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
var buf strings.Builder
w := csv.NewWriter(&buf)
w.UseCRLF = true // RFC 4180 line endings
for _, record := range records {
_ = w.Write(record)
}
w.Flush()
fmt.Print(buf.String())
// → name,age,city\r\n
// → Alice,30,Berlin\r\n
// → Bob,25,Tokyo\r\n
}
CLI (csvformat from csvkit)
# Re-format a CSV file with csvkit (Python-based)
csvformat -D ";" input.csv > output.csv
# Convert tabs to commas
csvformat -t input.tsv > output.csv
# Force-quote all fields
csvformat -U 1 input.csv > quoted.csv
# Using Miller (mlr) to normalize
mlr --icsv --ocsv --quote-all cat input.csv > clean.csv
Często zadawane pytania
Co robi formater CSV?
Formater CSV parsuje surowy tekst CSV, normalizuje cytowanie pól, przycina zbędne białe znaki i ponownie serializuje dane ze spójnym separatorem i stylem zakończeń wierszy. Wynikiem jest czysty plik CSV zgodny z RFC 4180 lub wybranymi przez Ciebie regułami formatowania.
Czym różni się formatowanie CSV od walidacji CSV?
Walidacja sprawdza, czy plik CSV jest zgodny z zestawem reguł, i raportuje błędy. Formatowanie idzie dalej: przepisuje plik, aby naprawić te problemy. Walidator informuje, że wiersz 5 zawiera niecytowany przecinek. Formater naprawia to, dodając cudzysłowy wokół pola.
Dlaczego muszę formatować pliki CSV przed ich importem?
Narzędzia do importu baz danych, potoki ETL i oprogramowanie do arkuszy kalkulacyjnych mają nieco inne zasady parsowania CSV. Niecytowane pole z przecinkiem zostanie podzielone na dwie kolumny przez ścisłe parsery. Formatowanie CSV zgodnie z RFC 4180 przed importem zapobiega tym błędom przesunięcia kolumn i cichemu uszkodzeniu danych.
Czy moje dane są wysyłane na serwer podczas korzystania z tego narzędzia?
Nie. Całe parsowanie i formatowanie odbywa się w przeglądarce przy użyciu JavaScript. Dane CSV pozostają na urządzeniu i nigdy nie są przesyłane przez sieć. Możesz to zweryfikować, otwierając zakładkę Sieć w narzędziach deweloperskich przeglądarki podczas korzystania z narzędzia.
Czy mogę zmienić separator podczas formatowania?
Tak. Narzędzie automatycznie wykrywa separator wejściowy (przecinek, tabulator, średnik lub pionowa kreska) i pozwala wybrać inny separator dla danych wyjściowych. Jest to przydatne przy konwersji między regionalnymi formatami CSV lub przechodzeniu z TSV na standardowy CSV.
Jak narzędzie obsługuje cytowane pola z osadzonymi znakami nowej linii?
Zgodnie z RFC 4180 pola zawierające znaki nowej linii muszą być ujęte w cudzysłowy. Formater zachowuje te osadzone znaki nowej linii i zapewnia obecność otaczających cudzysłowów. Jeśli pole ma niecytowany znak nowej linii na wejściu, formater ujmuje je w cudzysłowy podczas ponownej serializacji.
Jaki jest maksymalny rozmiar pliku obsługiwany przez to narzędzie?
Ponieważ narzędzie działa w przeglądarce, praktyczny limit zależy od dostępnej pamięci urządzenia. Pliki o rozmiarze do 10–20 MB zazwyczaj są przetwarzane bez problemów na nowoczesnym sprzęcie. W przypadku większych plików lepszym rozwiązaniem jest narzędzie wiersza poleceń, takie jak csvkit lub Miller.