Как в Go можно обработать файлы формата CSV?

Пользователь

от theron , в категории: Вопросы от знатоков , 2 года назад

Как в Go можно обработать файлы формата CSV?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Пользователь

от gilberto.aufderhar , 2 года назад

@theron 

В Go есть встроенный пакет encoding/csv, который предоставляет возможность чтения и записи CSV файлов.


Чтение CSV файла в Go можно выполнить следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {
    // Открыть файл CSV
    file, err := os.Open("file.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    // Создать новый ридер CSV
    reader := csv.NewReader(file)

    // Читать строки из файла
    for {
        record, err := reader.Read()
        if err == io.EOF {
            break
        }
        if err != nil {
            panic(err)
        }

        // Обработка строки
        fmt.Println(record)
    }
}


Здесь мы сначала открываем файл с помощью os.Open, затем создаем новый csv.Reader, который может читать строки из файла. Затем мы читаем строки из файла по одной в цикле, используя reader.Read(), пока не достигнем конца файла.


Каждая строка CSV файла представляется как массив строк ([]string), который мы можем обрабатывать, например, выводить на экран или сохранять в базу данных.


Запись CSV файла в Go можно выполнить следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import (
    "encoding/csv"
    "os"
)

func main() {
    // Создать новый файл CSV
    file, err := os.Create("new_file.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    // Создать новый писатель CSV
    writer := csv.NewWriter(file)
    defer writer.Flush()

    // Записать строки в файл
    writer.Write([]string{"Заголовок 1", "Заголовок 2", "Заголовок 3"})
    writer.Write([]string{"Строка 1, столбец 1", "Строка 1, столбец 2", "Строка 1, столбец 3"})
    writer.Write([]string{"Строка 2, столбец 1", "Строка 2, столбец 2", "Строка 2, столбец 3"})
}


Здесь мы создаем новый файл CSV с помощью os.Create, затем создаем новый csv.Writer, который может записывать строки в файл. Затем мы записываем строки в файл по одной с помощью writer.Write(). Обратите внимание, что мы вызываем writer.Flush() в конце записи, чтобы убедиться, что все записи записались в файл.