Разработка для файлов Azure с помощью PythonDevelop for Azure Files with Python

Изучите основы использования Python для разработки приложений и служб, использующих службы файлов Azure для хранения данных файлов.Learn the basics of using Python to develop apps or services that use Azure Files to store file data. Создайте простое консольное приложение и Узнайте, как выполнять основные действия с помощью Python и файлов Azure.Create a simple console app and learn how to perform basic actions with Python and Azure Files:

  • создание файловых ресурсов Azure;Create Azure file shares
  • Создание каталоговCreate directories
  • Перечисление файлов и каталогов в общей папке AzureEnumerate files and directories in an Azure file share
  • Передача, загрузка и удаление файлов.Upload, download, and delete a file
  • Создание резервных копий файловых ресурсов с помощью моментальных снимковCreate file share backups by using snapshots

Примечание

Так как к файлам Azure можно обращаться по протоколу SMB, вы можете создавать простые приложения, которые получают доступ к файловым ресурсам Azure с использованием стандартных классов ввода-вывода и функций Python.Because Azure Files may be accessed over SMB, it is possible to write simple applications that access the Azure file share using the standard Python I/O classes and functions. В этой статье описывается написание приложений, использующих пакет SDK Python для хранилища файлов Azure, который использует службы файлов azure REST API для взаимодействия с файлами Azure.This article will describe how to write apps that use the Azure Files Storage Python SDK, which uses the Azure Files REST API to talk to Azure Files.

Скачивание и установка пакета SDK службы хранилища Azure для PythonDownload and Install Azure Storage SDK for Python

Примечание

Если вы обновляете пакет SDK службы хранилища Azure для Python версии 0.36 или более ранней, удалите старый пакет SDK с помощью pip uninstall azure-storage, прежде чем устанавливать последнюю версию пакета.If you are upgrading from the Azure Storage SDK for Python version 0.36 or earlier, uninstall the older SDK using pip uninstall azure-storage before installing the latest package.

Установка через PyPIInstall via PyPI

Для установки с помощью индекса пакетов Python (PyPI) введите:To install via the Python Package Index (PyPI), type:

pip install azure-storage-file-share

Настройка приложения для работы со службой файлов AzureSet up your application to use Azure Files

Добавьте следующий код в начало исходного файла Python, чтобы использовать фрагменты кода из этой статьи.Add the following near the top of a Python source file to use the code snippets in this article.

from azure.core.exceptions import (
    ResourceExistsError,
    ResourceNotFoundError
)

from azure.storage.fileshare import (
    ShareServiceClient,
    ShareClient,
    ShareDirectoryClient,
    ShareFileClient
)

Настройка подключения к файлам AzureSet up a connection to Azure Files

Шаресервицеклиент позволяет работать с общими папками, каталогами и файлами.ShareServiceClient lets you work with shares, directories, and files. Следующий код создает объект, ShareServiceClient используя строку подключения учетной записи хранения.The following code creates a ShareServiceClient object using the storage account connection string.

# Create a ShareServiceClient from a connection string
service_client = ShareServiceClient.from_connection_string(connection_string)

создать файловый ресурс Azure;Create an Azure file share

В следующем примере кода используется объект шареклиент для создания общего ресурса, если он не существует.The following code example uses a ShareClient object to create the share if it doesn't exist.

def create_file_share(self, connection_string, share_name):
    try:
        # Create a ShareClient from a connection string
        share_client = ShareClient.from_connection_string(
            connection_string, share_name)

        print("Creating share:", share_name)
        share_client.create_share()

    except ResourceExistsError as ex:
        print("ResourceExistsError:", ex.message)

Создание каталогаCreate a directory

Вы можете упорядочить файлы в хранилище, разместив их в подкаталогах, чтобы не захламлять корневой каталог.You can organize storage by putting files inside subdirectories instead of having all of them in the root directory.

Следующий метод создает каталог в корне указанного файлового ресурса с помощью объекта шаредиректориклиент .The following method creates a directory in the root of the specified file share by using a ShareDirectoryClient object.

def create_directory(self, connection_string, share_name, dir_name):
    try:
        # Create a ShareDirectoryClient from a connection string
        dir_client = ShareDirectoryClient.from_connection_string(
            connection_string, share_name, dir_name)

        print("Creating directory:", share_name + "/" + dir_name)
        dir_client.create_directory()

    except ResourceExistsError as ex:
        print("ResourceExistsError:", ex.message)

Отправка файлаUpload a file

В этом разделе вы узнаете, как передать файл из локального хранилища в хранилище файлов Azure.In this section, you'll learn how to upload a file from local storage into Azure File Storage.

Следующий метод передает содержимое указанного файла в указанный каталог в указанной общей папке Azure.The following method uploads the contents of the specified file into the specified directory in the specified Azure file share.

def upload_local_file(self, connection_string, local_file_path, share_name, dest_file_path):
    try:
        source_file = open(local_file_path, "rb")
        data = source_file.read()

        # Create a ShareFileClient from a connection string
        file_client = ShareFileClient.from_connection_string(
            connection_string, share_name, dest_file_path)

        print("Uploading to:", share_name + "/" + dest_file_path)
        file_client.upload_file(data)

    except ResourceExistsError as ex:
        print("ResourceExistsError:", ex.message)

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Перечисление файлов и каталогов в общей папке AzureEnumerate files and directories in an Azure file share

Чтобы получить список файлов и каталогов в подкаталоге, используйте метод list_directories_and_files .To list the files and directories in a subdirectory, use the list_directories_and_files method. Этот метод возвращает Iterable автоматического разбиения на страницы.This method returns an auto-paging iterable. Следующий код выводит имя каждого файла и подкаталог в указанном каталоге в консоль.The following code outputs the name of each file and subdirectory in the specified directory to the console.

def list_files_and_dirs(self, connection_string, share_name, dir_name):
    try:
        # Create a ShareClient from a connection string
        share_client = ShareClient.from_connection_string(
            connection_string, share_name)

        for item in list(share_client.list_directories_and_files(dir_name)):
            if item["is_directory"]:
                print("Directory:", item["name"])
            else:
                print("File:", dir_name + "/" + item["name"])

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

скачать файл;Download a file

Чтобы загрузить данные из файла, используйте download_file.To download data from a file, use download_file.

В следующем примере демонстрируется использование download_file для получения содержимого указанного файла и его локального сохранения с загрузкой в начале файла.The following example demonstrates using download_file to get the contents of the specified file and store it locally with DOWNLOADED- prepended to the filename.

def download_azure_file(self, connection_string, share_name, dir_name, file_name):
    try:
        # Build the remote path
        source_file_path = dir_name + "/" + file_name

        # Add a prefix to the filename to 
        # distinguish it from the uploaded file
        dest_file_name = "DOWNLOADED-" + file_name

        # Create a ShareFileClient from a connection string
        file_client = ShareFileClient.from_connection_string(
            connection_string, share_name, source_file_path)

        print("Downloading to:", dest_file_name)

        # Open a file for writing bytes on the local system
        with open(dest_file_name, "wb") as data:
            # Download the file from Azure into a stream
            stream = file_client.download_file()
            # Write the stream to the local file
            data.write(stream.readall())

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Создание моментального снимка общего ресурсаCreate a share snapshot

Вы можете создать копию на момент времени всего общего файлового ресурса.You can create a point in time copy of your entire file share.

def create_snapshot(self, connection_string, share_name):
    try:
        # Create a ShareClient from a connection string
        share_client = ShareClient.from_connection_string(
            connection_string, share_name)

        # Create a snapshot
        snapshot = share_client.create_snapshot()
        print("Created snapshot:", snapshot["snapshot"])

        # Return the snapshot time so 
        # it can be accessed later
        return snapshot["snapshot"]

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Список общих ресурсов и моментальных снимковList shares and snapshots

Вы можете вывести список всех моментальных снимков для определенного общего ресурса.You can list all the snapshots for a particular share.

def list_shares_snapshots(self, connection_string):
    try:
        # Create a ShareServiceClient from a connection string
        service_client = ShareServiceClient.from_connection_string(connection_string)

        # List the shares in the file service
        shares = list(service_client.list_shares(include_snapshots=True))

        for share in shares:
            if (share["snapshot"]):
                print("Share:", share["name"], "Snapshot:", share["snapshot"])
            else:
                print("Share:", share["name"])

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Просмотр снимков общего ресурсаBrowse share snapshot

Можно просмотреть каждый моментальный снимок общей папки, чтобы получить файлы и каталоги с этого момента времени.You can browse each share snapshot to retrieve files and directories from that point in time.

def browse_snapshot_dir(self, connection_string, share_name, snapshot_time, dir_name):
    try:
        # Create a ShareClient from a connection string
        snapshot = ShareClient.from_connection_string(
            conn_str=connection_string, share_name=share_name, snapshot=snapshot_time)

        print("Snapshot:", snapshot_time)

        for item in list(snapshot.list_directories_and_files(dir_name)):
            if item["is_directory"]:
                print("Directory:", item["name"])
            else:
                print("File:", dir_name + "/" + item["name"])

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Получение файлов из моментальных снимков общих ресурсовGet file from share snapshot

Файл можно скачать из моментального снимка общего ресурса.You can download a file from a share snapshot. Это позволяет восстановить предыдущую версию файла.This enables you to restore a previous version of a file.

def download_snapshot_file(self, connection_string, share_name, snapshot_time, dir_name, file_name):
    try:
        # Build the remote path
        source_file_path = dir_name + "/" + file_name

        # Add a prefix to the local filename to 
        # indicate it's a file from a snapshot
        dest_file_name = "SNAPSHOT-" + file_name

        # Create a ShareFileClient from a connection string
        snapshot_file_client = ShareFileClient.from_connection_string(
            conn_str=connection_string, share_name=share_name, 
            file_path=source_file_path, snapshot=snapshot_time)

        print("Downloading to:", dest_file_name)

        # Open a file for writing bytes on the local system
        with open(dest_file_name, "wb") as data:
            # Download the file from Azure into a stream
            stream = snapshot_file_client.download_file()
            # Write the stream to the local file
            data.write(stream.readall())

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Удаление одного моментального снимка общих ресурсовDelete a single share snapshot

Вы можете удалить один моментальный снимок общих ресурсов.You can delete a single share snapshot.

def delete_snapshot(self, connection_string, share_name, snapshot_time):
    try:
        # Create a ShareClient for a snapshot
        snapshot_client = ShareClient.from_connection_string(conn_str=connection_string, share_name=share_name, snapshot=snapshot_time)

        print("Deleting snapshot:", snapshot_time)

        # Delete the snapshot
        snapshot_client.delete_share()

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Удаление файлаDelete a file

Чтобы удалить файл, вызовите delete_file.To delete a file, call delete_file.

def delete_azure_file(self, connection_string, share_name, file_path):
    try:
        # Create a ShareFileClient from a connection string
        file_client = ShareFileClient.from_connection_string(
            connection_string, share_name, file_path)

        print("Deleting file:", share_name + "/" + file_path)

        # Delete the file
        file_client.delete_file()

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Удаление общего ресурса с имеющимся моментальным снимком общих ресурсовDelete share when share snapshots exist

Чтобы удалить общую папку, содержащую моментальные снимки, вызовите delete_share с помощью delete_snapshots=True .To delete a share that contains snapshots, call delete_share with delete_snapshots=True.

def delete_share(self, connection_string, share_name):
    try:
        # Create a ShareClient from a connection string
        share_client = ShareClient.from_connection_string(
            connection_string, share_name)

        print("Deleting share:", share_name)

        # Delete the share and snapshots
        share_client.delete_share(delete_snapshots=True)

    except ResourceNotFoundError as ex:
        print("ResourceNotFoundError:", ex.message)

Дальнейшие шагиNext steps

Теперь, когда вы узнали, как работать с файлами Azure с помощью Python, воспользуйтесь следующими ссылками для получения дополнительных сведений.Now that you've learned how to manipulate Azure Files with Python, follow these links to learn more.