All nodes/Data/DataFrame I/O

Read CSV

Reads a CSV file from the connected file_store (WebDAV) and converts it into a DataFrame. Parameters: delimiter, encoding, header row.

Read CSV
File storeSuccess
Error

Type in the graph: df_read_csv

Exec

An error branch can be enabled (expose_error_output) to handle failures on their own path.

Ports can be split into separate execution and data handles.

Try it

Minimal working workflow

Entry
Read CSV
Exit
  • Execute
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

Runs as pasted

When to use it

Takes a CSV file from a file store and turns it into a table (a DataFrame) — the payload the DF family works on: row filter, column select, group by.

The neighbouring File Read hands you the same file as plain text. Use that one when the content is needed as a string (a prompt, a template, a log), and this one when the next step is filtering, joining or aggregating by column.

How it works

“Connection source” defaults to “From the run context”: the node reads this workspace’s own store — the same tree the Files section browses. “Subfolder” narrows the root. If the file lives on an external WebDAV, switch to “External connection” and wire WebDAV Config or WS Store into the “File store” port that appears.

“File path” is a template rendered on every run, so reports/{{ variables.session_id }}.csv reads a separate file per session.

The whole table travels downstream, while the run log and the node card show only a preview: the first 50 rows, the shape (rows × columns) and the column types.

Common mistakes

  • Putting the table into text. {{ nodes.<id>.output }} in a prompt or a template yields DataFrameEnvelope(rows=120, cols=5), not the data. To get text, add Convert to CSV or JSON.
  • A semicolon export from Excel. The delimiter defaults to ,; such a file needs ;, or every row collapses into one column with a very long name. Legacy Cyrillic exports usually come in Windows-1251 as well.
  • “Header row index” set to -1. The header is not read, columns are named 0, 1, 2, and every later reference by column name stops matching.
  • A file over the limit. “Max bytes” (25 MiB by default) is not a refusal but a cut: you get a partial table, flagged as meta.truncated in the preview. “Row limit” caps rows after parsing and saves no bytes.
  • The file does not exist yet. The step fails with a not-found error. If “there may be no file” is a normal case, enable “Error output” and route that branch separately.

Inputs

PortWirePayloadNotes
File storefile_storeDatadata

shown when connection_source ≠ "auto"

Outputs

PortWirePayloadNotes
SuccessoutputExecute + Dataexecute_datadataframe
Erroron_errorExecute + Dataexecute_data

shown when expose_error_output = true

Configuration

FieldTypeDefaultDescription
File pathpathstring""

Path relative to the store root. Jinja templates are rendered per run, so ``reports/{{ variables.session_id }}.csv`` writes one file per session.

supports templates

Delimiterdelimiterstring,

Column separator, usually ``,`` or ``;``.

Text encodingencodingstringutf-8

Character encoding of the file. Use utf-8-sig when the CSV must open cleanly in Excel, cp1251 for legacy Cyrillic exports.

Options: utf-8 — UTF-8, utf-8-sig — UTF-8 with BOM (Excel), utf-16 — UTF-16, cp1251 — Windows-1251 (Cyrillic), cp1252 — Windows-1252 (Western), latin-1 — Latin-1 (ISO 8859-1), koi8-r — KOI8-R, ascii — ASCII

Header row indexheader_rowinteger0

Row index of the column header (0-based). Use -1 to skip the header.

Connection sourceconnection_sourcestringauto

Where this node gets its connection. 'From the run context' uses what the platform already knows (the Telegram bot this workflow is deployed to / this workspace's own file store) and needs no wiring. 'External connection' shows the resource port so a config node can be wired into it.

Options: auto — From the run context, external — External connection (wire a config node)

Subfolderstore_subfolderstring""

Optional folder inside this workspace's store to treat as the root, e.g. `reports` or `sessions/{{ variables.session_id }}`. Blank = the store root.

supports templates

shown when connection_source = auto

Advanced
Row limitnrows_limitinteger0

Maximum rows to read (0 = no limit).

Max bytesmax_bytesinteger26214400

Refuse to transfer more than this many bytes.

Shared fields

Every node has these three — the platform adds them, not the node author.

  • expose_error_output — When enabled, show an execution output to connect nodes that run if this step fails.
  • split_ports_in — Show separate execution and data input handles instead of one combined port.
  • split_ports_out — Show separate execution and data output handles instead of one combined port.