Azure File Share code samples using Python version 2 client libraries

This article shows code samples that use version 2 of the Azure File Share client library for Python.

On March 31, 2023, we retired support for Azure SDK libraries which do not conform to the current Azure SDK guidelines. The new Azure SDK libraries are updated regularly to drive consistent experiences and strengthen your security posture. It's recommended that you transition to the new Azure SDK libraries to take advantage of the new capabilities and critical security updates.

Although the older libraries can still be used beyond March 31, 2023, they'll no longer receive official support and updates from Microsoft. For more information, see the support retirement announcement.

Prerequisites

Install the following package using pip install:

pip install azure-storage-file

Add the following import statement:

from azure.storage.file import FileService

Create an Azure file share

Related article: Develop for Azure Files with Python

The following code example uses a FileService object to create the share if it doesn't exist.

file_service.create_share('myshare')

Create a directory

Related article: Develop for Azure Files with Python

You can organize storage by putting files inside subdirectories instead of having all of them in the root directory.

The code below will create a subdirectory named sampledir under the root directory.

file_service.create_directory('myshare', 'sampledir')

Upload a file

Related article: Develop for Azure Files with Python

In this section, you'll learn how to upload a file from local storage into Azure Files.

An Azure file share contains, at the least, a root directory where files can reside. To create a file and upload data, use any of the following methods:

These methods perform the necessary chunking when the size of the data exceeds 64 MiB.

create_file_from_path uploads the contents of a file from the specified path, and create_file_from_stream uploads the contents from an already opened file/stream. create_file_from_bytes uploads an array of bytes, and create_file_from_text uploads the specified text value using the specified encoding (defaults to UTF-8).

The following example uploads the contents of the sunset.png file into the myfile file.

from azure.storage.file import ContentSettings
file_service.create_file_from_path(
    'myshare',
    None,  # We want to create this file in the root directory, so we specify None for the directory_name
    'myfile',
    'sunset.png',
    content_settings=ContentSettings(content_type='image/png'))

Enumerate files and directories in an Azure file share

Related article: Develop for Azure Files with Python

To list the files and directories in a share, use the list_directories_and_files method. This method returns a generator. The following code outputs the name of each file and directory in a share to the console.

generator = file_service.list_directories_and_files('myshare')
for file_or_dir in generator:
    print(file_or_dir.name)

Download a file

Related article: Develop for Azure Files with Python

To download data from a file, use any of the following methods:

These methods perform the necessary chunking when the size of the data exceeds 64 MiB.

The following example demonstrates using get_file_to_path to download the contents of the myfile file and store it to the out-sunset.png file.

file_service.get_file_to_path('myshare', None, 'myfile', 'out-sunset.png')

Create a share snapshot

Related article: Develop for Azure Files with Python

You can create a point in time copy of your entire file share.

snapshot = file_service.snapshot_share(share_name)
snapshot_id = snapshot.snapshot

Create share snapshot with metadata

metadata = {"foo": "bar"}
snapshot = file_service.snapshot_share(share_name, metadata=metadata)

List shares and snapshots

Related article: Develop for Azure Files with Python

You can list all the snapshots for a particular share.

shares = list(file_service.list_shares(include_snapshots=True))

Browse share snapshot

Related article: Develop for Azure Files with Python

You can browse each share snapshot to retrieve files and directories from that point in time.

directories_and_files = list(
    file_service.list_directories_and_files(share_name, snapshot=snapshot_id))

Get file from share snapshot

Related article: Develop for Azure Files with Python

You can download a file from a share snapshot. This enables you to restore a previous version of a file.

with open(FILE_PATH, 'wb') as stream:
    file = file_service.get_file_to_stream(
        share_name, directory_name, file_name, stream, snapshot=snapshot_id)

Delete a single share snapshot

Related article: Develop for Azure Files with Python

You can delete a single share snapshot.

file_service.delete_share(share_name, snapshot=snapshot_id)

Delete a file

Related article: Develop for Azure Files with Python

To delete a file, call delete_file.

The following code example shows how to delete a file:

file_service.delete_file('myshare', None, 'myfile')

Delete share when share snapshots exist

Related article: Develop for Azure Files with Python

A share that contains snapshots cannot be deleted unless all the snapshots are deleted first.

The following code example shows how to delete a share:

file_service.delete_share(share_name, delete_snapshots=DeleteSnapshot.Include)