Go:
Lavorare con CSV
Come fare:
Lavorare con file CSV in Go è semplice, grazie alla sua libreria standard, encoding/csv
. Di seguito è presentato un primo approccio alla lettura e scrittura di file CSV.
Leggere un File CSV
Per leggere da un file CSV, si apre prima il file usando os.Open
, quindi si crea un nuovo lettore CSV con csv.NewReader
.
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
file, err := os.Open("data.csv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
records, err := reader.ReadAll()
if err != nil {
panic(err)
}
for _, record := range records {
fmt.Println(record)
}
}
Questo frammento di codice leggerà tutti i record da data.csv
e li stamperà. Ogni record è una slice di campi.
Scrivere in un File CSV
Per scrivere, si usa csv.NewWriter
e writer.WriteAll
o writer.Write
per scrivere rispettivamente più record CSV o un singolo record CSV.
package main
import (
"encoding/csv"
"os"
)
func main() {
file, err := os.Create("output.csv")
if err != nil {
panic(err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
records := [][]string{
{"Nome", "Età", "Città"},
{"John Doe", "30", "New York"},
{"Jane Doe", "27", "Los Angeles"},
}
if err := writer.WriteAll(records); err != nil {
panic(err)
}
}
Ciò creerà un file chiamato output.csv
con i record forniti. Ricordarsi sempre di svuotare il buffer del writer per assicurarsi che tutti i dati in buffer vengano scritti nel file.
Approfondimento
Il pacchetto Go encoding/csv
fornisce un supporto robusto per la lettura e la scrittura di file CSV, ma è progettato con la semplicità in mente, il che significa che non gestisce scenari più complessi come l’auto-rilevamento dei delimitatori, il trattamento delle virgolette o degli a capo incorporati nei campi senza una gestione manuale.
Storicamente, la gestione dei CSV nei linguaggi di programmazione è spesso stata ingombrante a causa di queste complessità, ma la libreria standard di Go astrae molte di queste questioni, consentendo agli sviluppatori di lavorare con dati CSV con relativa facilità. Tuttavia, per manipolazioni CSV più complesse, potrebbe essere necessario utilizzare librerie di terze parti come gocsv
o gestire il parsing manualmente.
Un aspetto notevole del pacchetto csv
di Go è il suo supporto per la specificazione di virgole personalizzate (delimitatori), che gli consente di funzionare senza problemi con varianti di file CSV, come i valori separati da tabulazioni (TSV). Tuttavia, quando si lavora con file CSV altamente irregolari o non standard, i programmatori Go potrebbero trovarsi nella necessità di estendere le implementazioni esistenti del lettore o scrittore csv.
Sebbene le capacità di gestione dei CSV in Go siano robuste per scopi generali, per applicazioni che richiedono una manipolazione intensiva dei dati, come la data science o compiti di trasformazione dati complessi, i programmatori potrebbero guardare a pacchetti di elaborazione dati dedicati o persino ad altri linguaggi più adatti a queste attività, come Python con la sua libreria pandas
. Tuttavia, per operazioni di lettura-scrittura CSV dirette, la libreria standard di Go si distingue per la sua efficienza e semplicità.