CSV

Wat is een CSV-bestand?

Een tabel in platte tekst. Elk rekenblad, elke database en elk analysehulpmiddel leest hem. Let op: Excel scheidt hier met een puntkomma.

Wat CSV is

CSV is een puur tekstformaat dat in elke editor opengaat. Het wordt gebruikt voor gegevens tussen programma’s verplaatsen.

De extensie is .csv en de volledige naam Comma-Separated Values. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar CSV vandaan komt

Het gaat terug tot 1972. De specificatie is RFC 4180.

Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Er wordt niets weggegooid

CSV bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.

Er is nergens plaats voor een aantekening

CSV heeft geen commentaarsyntaxis. Alles wat toelicht moet buiten het bestand leven, en dat is goed om te weten voordat je het kiest voor iets dat een mens met de hand bijhoudt.

Wat CSV opent

Microsoft Excel, LibreOffice Calc en pandas lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een werkformaat

CSV is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.

Wat er misgaat

De terugkerende klachten: kolomtypen worden bij het inlezen geraden in plaats van opgegeven.

Niets daarvan is een reden om het formaat te mijden. Het zijn de dingen die je beter kent voordat een ervan je verrast, en dat is een andere en een nuttigere bewering.

Het eenvoudigste formaat dat niet eenvoudig is

Een CSV is rijen waarden gescheiden door komma’s, en die beschrijving klopt totdat de eerste waarde een komma bevat. Dan moet er geciteerd worden, en geciteerde waarden hebben een manier nodig om zelf een aanhalingsteken te bevatten — precies waar implementaties het oneens worden.

RFC 4180 werd in 2005 gepubliceerd om de conventies vast te leggen, en zegt expliciet dat het bestaande praktijk documenteert in plaats van een standaard voor te schrijven. Twintig jaar later houdt veel software zich er nog steeds niet aan.

Citeren is het deel dat bestanden echt breekt

Een waarde met een komma, aanhalingsteken of regeleinde moet tussen dubbele aanhalingstekens staan, en een aanhalingsteken erbinnen wordt tweemaal geschreven. Doe je dat goed, dan kan een waarde alles bevatten, inclusief een hele alinea met regeleindes.

Doe je het fout, dan is de schade stil. Een niet-ontsnapt aanhalingsteken laat een parser de rest van het bestand in één veld opslokken. Een komma in een niet-geciteerd adres verschuift elke volgende kolom met één plek — voor die rij alleen.

Het scheidingsteken is vaak geen komma

In landen waar het decimaalteken een komma is — het grootste deel van continentaal Europa — exporteren rekenbladen met puntkomma’s in plaats daarvan, want een bestand vol "1,50" zou anders onleesbaar zijn. De extensie blijft .csv.

Tabs zijn de derde gangbare keuze en de reden dat TSV bestaat, omdat een tab bijna nooit in een waarde voorkomt. Opent een CSV als één kolom, controleer dan eerst het scheidingsteken: het bestand is prima, de lezer gokte verkeerd.

Alles is tekst tot iets anders beslist

Een CSV heeft geen types. De tekens 0 0 1 2 3 staan in het bestand, en of ze het getal 123 worden of de tekst "00123" beslist volledig wat ze inleest.

Dat is de wortel van elke klacht over rekenbladen die data opeten: verdwijnende voorloopnullen in postcodes, productcodes die datums worden. Niets daarvan zit in het bestand — het gebeurt bij het openen, en de verdediging is importeren in plaats van openen en lastige kolommen als tekst declareren.

Codering, en de onzichtbare drie bytes

Een CSV draagt geen verklaring van zijn tekencodering. UTF-8 is de verstandige standaard; Excel op Windows nam van oudsher een regionale codepagina aan, wat verklaart waarom een export vol geaccentueerde tekens als brabbeltaal opent.

De gangbare omweg is een byte-order-mark schrijven — drie onzichtbare bytes die Excel vertellen dat het bestand UTF-8 is. Dat werkt, en schept een ander probleem: veel parsers zien die bytes dan als deel van de eerste kolomkop.

Waar CSV echt uitstekend in is

Streamen. Een bestand groter dan het geheugen kan rij voor rij gelezen worden door een tool die nooit meer dan één regel vasthoudt, waarom datapijplijnen en opdrachtregelgereedschap het allemaal spreken.

En transparantie. Het is tekst, dus niets kan erin verstopt zitten — geen macro’s, geen externe links, geen formules die naar andere bestanden reiken. Dat is precies waarom veiligheidsbewuste systemen om CSV vragen in plaats van een werkmap.

Eén schrijven dat iemand anders kan lezen

Vijf gewoontes voorkomen bijna elk probleem. Gebruik UTF-8 zonder byte-order-mark. Citeer elk veld dat het scheidingsteken, een aanhalingsteken of regeleinde kan bevatten — of citeer gewoon alles. Gebruik een kopregel met korte, ondubbelzinnige namen. Schrijf datums in ISO-vorm, jaar eerst.

Niets daarvan wordt door iets afgedwongen, wat het de moeite waard maakt om het bewust te doen. Een CSV die deze vijf regels volgt, opent correct in elk gereedschap dat hem ooit zal ontvangen.

De gegevens, op één plek

Kenmerken en herkomst van het formaat CSV.
Extensie.csv
Mediatypetext/csv
Voor het eerst gepubliceerd1972
SpecificatieRFC 4180