Fabric API - Files

onelake_list, onelake_read, onelake_write and onelake_delete, and the two forms a file path takes.

The four methods below read and write files in OneLake, the storage behind every lakehouse, and the Files section in the lakehouse explorer is the folder they work in.

File paths

Every path starts with the lakehouse and continues into it, and the lakehouse can be named in two ways:

FormExample
Name and typeOperations.Lakehouse/Files/incoming/invoices-2026-08.csv
Item ID73811955-064d-481a-a7e9-f9c563124f9e/Files/incoming/invoices-2026-08.csv

Both forms work in every method below. A lakehouse keeps files under Files, and the table methods write to Tables, next to it.

onelake_list

conn.onelake_list(workspace_id, directory='')

Lists the files and subfolders directly under a path.

ParameterTypeMeaning
workspace_idstrThe workspace whose storage to list
directorystrThe folder to list, e.g. Operations.Lakehouse/Files/incoming, or empty for the top of the workspace

Returns a dict with paths, a list of dicts each with name (the full path), isDirectory (true or false), contentLength and lastModified.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class ListFiles(Service):

    def handle(self):

        workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'

        conn = self.microsoft.fabric['Zato Fabric']

        listing = conn.onelake_list(workspace_id, 'Operations.Lakehouse/Files/incoming')

        files = []
        for path in listing['paths']:
            file = {'name': path['name'], 'is_directory': path['isDirectory']}
            files.append(file)

        self.response.payload = {'files': files}
{"files": [{"name": "Operations.Lakehouse/Files/incoming/invoices-2026-08.csv", "is_directory": false}]}

onelake_read

conn.onelake_read(workspace_id, file_path)

Returns a file's contents as bytes.

ParameterTypeMeaning
workspace_idstrThe workspace the file is in
file_pathstrThe file, in either path form
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class ReadFile(Service):

    def handle(self):

        workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
        file_path = 'Operations.Lakehouse/Files/incoming/invoices-2026-08.csv'

        conn = self.microsoft.fabric['Zato Fabric']

        data = conn.onelake_read(workspace_id, file_path)
        text = data.decode('utf-8')

        size = len(data)
        lines = text.splitlines()
        first_line = lines[0]

        self.response.payload = {'size': size, 'first_line': first_line}
{"size": 142, "first_line": "invoice_id,location,insurer,amount,status,sent_at"}

onelake_write

conn.onelake_write(workspace_id, file_path, data)

Creates a file with these contents, or replaces it if it exists. Missing folders in the path are created.

ParameterTypeMeaning
workspace_idstrThe workspace to write to
file_pathstrThe file, in either path form
databytes, str or list of dictsThe contents - bytes go as they are, text is written as UTF-8, a list of dicts becomes CSV with a header made of the first row's keys

Returns nothing.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class WriteFile(Service):

    def handle(self):

        workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
        file_path = 'Operations.Lakehouse/Files/exports/invoices-2026-08.csv'

        conn = self.microsoft.fabric['Zato Fabric']

        rows = [
          {'location': 'Riverside',   'invoiced': 2895.50},
          {'location': 'Oak Hill',    'invoiced': 1840.00},
          {'location': 'Maple Grove', 'invoiced': 415.75},
        ]

        conn.onelake_write(workspace_id, file_path, rows)

        self.response.payload = {'rows': len(rows)}

onelake_delete

conn.onelake_delete(workspace_id, file_path, recursive=False)

Deletes a file, or a folder with everything in it.

ParameterTypeMeaning
workspace_idstrThe workspace the file is in
file_pathstrThe file or folder, in either path form
recursiveboolTrue to delete a folder along with its files and subfolders

Returns nothing. Deleting a file that does not exist raises an exception, as does deleting a non-empty folder without recursive.

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class DeleteFile(Service):

    def handle(self):

        workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
        file_path = 'Operations.Lakehouse/Files/incoming/invoices-2026-08.csv'

        conn = self.microsoft.fabric['Zato Fabric']

        conn.onelake_delete(workspace_id, file_path)

See also

PageWhat it covers
Fabric API - TablesImporting a written file into a table with load_table
Writing data to FabricLoading a file into a table and writing a monthly export
Fabric API - ConnectionThe storage token these methods use

Learn more