Go:
Робота з CSV

Як:

Робота з файлами CSV у Go є простою завдяки стандартній бібліотеці encoding/csv. Нижче наведено основні вказівки щодо читання та запису файлів CSV.

Читання файлу CSV

Щоб прочитати файл CSV, спочатку відкрийте файл за допомогою os.Open, а потім створіть новий читач CSV за допомогою 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)
    }
}

Цей фрагмент коду прочитає всі записи з data.csv і виведе їх. Кожен запис - це масив полів.

Запис до файлу CSV

Для запису використовуйте csv.NewWriter і writer.WriteAll або writer.Write для записування декількох або одного запису 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{
        {"Name", "Age", "City"},
        {"John Doe", "30", "New York"},
        {"Jane Doe", "27", "Los Angeles"},
    }

    if err := writer.WriteAll(records); err != nil {
        panic(err)
    }
}

Це створить файл під назвою output.csv з наданими записами. Завжди пам’ятайте очистити буфер записувача, щоб переконатися, що всі буферизовані дані записані у файл.

Поглиблений огляд

Пакет Go encoding/csv забезпечує надійну підтримку для читання та запису файлів CSV, але він розроблений з урахуванням простоти, що означає, що він не обробляє складніші сценарії, такі як автоматичне визначення роздільників, робота з лапками або вбудовані переноси рядків у полях без ручного втручання.

Історично обробка CSV у мовах програмування часто була обтяжливою через ці складнощі, але стандартна бібліотека Go абстрагує багато з цих проблем, дозволяючи розробникам працювати з даними CSV з відносною легкістю. Однак, для складнішої маніпуляції CSV можуть знадобитися сторонні бібліотеки, як-от gocsv, або вручну розбір.

Одна помітна риса пакета csv Go - це підтримка вказівки користувацького коми (роздільника), що дозволяє йому безперешкодно працювати з варіантами файлів CSV, як-от табулювання (TSV). Однак, коли мова йде про дуже нерегулярні або нестандартні файли CSV, програмістам Go може знадобитися розширити існуючі реалізації читача або письменника csv.

Хоча можливості обробки CSV в Go є міцними для загальних цілей, для застосувань, що вимагають інтенсивної маніпуляції з даними, таких як наука про дані або складні завдання трансформації даних, програмістам може знадобитися звернутися до спеціалізованих пакетів обробки даних або навіть інших мов, краще підходящих для цих завдань, як-от Python з його бібліотекою pandas. Тим не менш, для прямих операцій з читання-запису CSV стандартна бібліотека Go вирізняється своєю ефективністю та простотою.