hugo/docs/content/en/functions/data/GetCSV.md
2024-06-21 09:41:24 +02:00

3.8 KiB

title description categories keywords action toc
data.GetCSV Returns an array of arrays from a local or remote CSV file, or an error if the file does not exist.
aliases related returnType signatures
getCSV
functions/data/GetJSON
functions/resources/Get
functions/resources/GetRemote
methods/page/Resources
[][]string
data.GetCSV SEPARATOR INPUT... [OPTIONS]
true

{{% deprecated-in 0.123.0 %}} Instead, use transform.Unmarshal with a global, page, or remote resource.

See the remote data example.

{{% /deprecated-in %}}

Given the following directory structure:

my-project/
└── other-files/
    └── pets.csv

Access the data with either of the following:

{{ $data := getCSV "," "other-files/pets.csv" }}
{{ $data := getCSV "," "other-files/" "pets.csv" }}

{{% note %}} When working with local data, the file path is relative to the working directory.

You must not place CSV files in the project's data directory. {{% /note %}}

Access remote data with either of the following:

{{ $data := getCSV "," "https://example.org/pets.csv" }}
{{ $data := getCSV "," "https://example.org/" "pets.csv" }}

The resulting data structure is an array of arrays:

[
  ["name","type","breed","age"],
  ["Spot","dog","Collie","3"],
  ["Felix","cat","Malicious","7"]
]

Options

Add headers to the request by providing an options map:

{{ $opts := dict "Authorization" "Bearer abcd" }}
{{ $data := getCSV "," "https://example.org/pets.csv" $opts }}

Add multiple headers using a slice:

{{ $opts := dict "X-List" (slice "a" "b" "c") }}
{{ $data := getCSV "," "https://example.org/pets.csv" $opts }}

Global resource alternative

Consider using the resources.Get function with transform.Unmarshal when accessing a global resource.

my-project/
└── assets/
    └── data/
        └── pets.csv
{{ $data := dict }}
{{ $p := "data/pets.csv" }}
{{ with resources.Get $p }}
  {{ $opts := dict "delimiter" "," }}
  {{ $data = . | transform.Unmarshal $opts }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}

Page resource alternative

Consider using the Resources.Get method with transform.Unmarshal when accessing a page resource.

my-project/
└── content/
    └── posts/
        └── my-pets/
            ├── index.md
            └── pets.csv
{{ $data := dict }}
{{ $p := "pets.csv" }}
{{ with .Resources.Get $p }}
  {{ $opts := dict "delimiter" "," }}
  {{ $data = . | transform.Unmarshal $opts }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}

Remote resource alternative

Consider using the resources.GetRemote function with transform.Unmarshal when accessing a remote resource to improve error handling and cache control.

{{ $data := dict }}
{{ $u := "https://example.org/pets.csv" }}
{{ with resources.GetRemote $u }}
  {{ with .Err }}
    {{ errorf "%s" . }}
  {{ else }}
    {{ $opts := dict "delimiter" "," }}
    {{ $data = . | transform.Unmarshal $opts }}
  {{ end }}
{{ else }}
  {{ errorf "Unable to get remote resource %q" $u }}
{{ end }}