Метод csv.Writer.WriteAll
Метод WriteAll записывает все записи из переданного слайса
в CSV-формате. Он принимает один параметр - слайс слайсов строк
[][]string, где каждая внутренняя запись представляет
собой строку полей. Метод автоматически экранирует поля,
содержащие специальные символы (запятые, кавычки, символы
новой строки), и добавляет разделители между полями и строками.
Синтаксис
writer.WriteAll(records)
Пример
Давайте запишем простой набор записей в CSV-формате:
package main
import (
"encoding/csv"
"os"
)
func main() {
records := [][]string{
{"name", "age", "city"},
{"John", "30", "New York"},
{"Jane", "25", "London"},
}
file, _ := os.Create("data.csv")
defer file.Close()
writer := csv.NewWriter(file)
writer.WriteAll(records)
}
В результате будет создан файл data.csv
со следующим содержимым:
name,age,city
John,30,New York
Jane,25,London
Пример
Давайте запишем данные, содержащие специальные символы:
package main
import (
"encoding/csv"
"os"
)
func main() {
records := [][]string{
{"Name", "Description"},
{"Item 1", `This "product" is great`},
{"Item 2", "Line 1\nLine 2"},
}
file, _ := os.Create("products.csv")
defer file.Close()
writer := csv.NewWriter(file)
writer.WriteAll(records)
}
Результат выполнения кода (содержимое файла):
Name,Description
Item 1,"This ""product"" is great"
Item 2,"Line 1
Line 2"
Обратите внимание, что поля с запятыми, кавычками или переносами строк автоматически обрамляются в двойные кавычки, а внутренние кавычки экранируются.
Пример
Давайте запишем данные с изменённым разделителем:
package main
import (
"encoding/csv"
"os"
)
func main() {
records := [][]string{
{"a", "b", "c"},
{"1", "2", "3"},
{"4", "5", "6"},
}
file, _ := os.Create("data.tsv")
defer file.Close()
writer := csv.NewWriter(file)
writer.Comma = '\t'
writer.WriteAll(records)
}
Результат выполнения кода (содержимое файла):
a b c
1 2 3
4 5 6
В этом примере мы изменили разделитель полей
с запятой на табуляцию, установив свойство
Comma в значение '\t'.
Пример
Давайте проверим обработку ошибок при записи:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
records := [][]string{
{"a", "b", "c"},
{"1", "2", "3"},
}
file, _ := os.Create("output.csv")
defer file.Close()
writer := csv.NewWriter(file)
err := writer.WriteAll(records)
if err != nil {
fmt.Printf("Error: %v\n", err)
}
}
Если операция записи завершилась успешно, программа не выведет сообщение об ошибке. В противном случае будет выведено описание возникшей проблемы.
Смотрите также
-
метод
csv.Writer.Write,
который записывает одну запись в CSV-формате -
метод
csv.Writer.Flush,
который принудительно записывает все буферизированные данные -
метод
csv.Reader.ReadAll,
который читает все записи из CSV-формата -
функцию
csv.NewWriter,
которая создаёт новый объект для записи CSV