Develop for Azure Files with Python (Tworzenie oprogramowania dla usługi Azure Files przy użyciu języka Python)Develop for Azure Files with Python

Poznaj podstawy używania języka Python do tworzenia aplikacji lub usług, które używają Azure Files do przechowywania danych plików.Learn the basics of using Python to develop apps or services that use Azure Files to store file data. Utwórz prostą aplikację konsolową i Dowiedz się, jak wykonywać podstawowe działania za pomocą języka Python i Azure Files:Create a simple console app and learn how to perform basic actions with Python and Azure Files:

  • Tworzenie udziałów plików platformy AzureCreate Azure file shares
  • Tworzenie katalogówCreate directories
  • Wyliczanie plików i katalogów w udziale plików platformy AzureEnumerate files and directories in an Azure file share
  • Przekazywanie, pobieranie i usuwanie plikuUpload, download, and delete a file
  • Tworzenie kopii zapasowych udziałów plików za pomocą migawekCreate file share backups by using snapshots

Uwaga

Ponieważ do Azure Files można uzyskać dostęp za pośrednictwem protokołu SMB, można napisać proste aplikacje, które uzyskują dostęp do udziału plików platformy Azure przy użyciu standardowych klas i funkcji we/wy języka 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. W tym artykule opisano sposób pisania aplikacji korzystających z zestawu SDK języka Python Azure Files Storage, który używa interfejsu API REST Azure Files do komunikowania się z Azure Files.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.

Pobierz i Zainstaluj zestaw SDK usługi Azure Storage dla języka PythonDownload and Install Azure Storage SDK for Python

Uwaga

Jeśli uaktualniasz z zestawu SDK usługi Azure Storage dla języka Python w wersji 0,36 lub starszej, Odinstaluj starszy zestaw SDK przy użyciu programu pip uninstall azure-storage przed zainstalowaniem najnowszego pakietu.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.

Biblioteka klienta usługi Azure File Storage V12. x dla języka Python wymaga języka Python 2,7 lub 3,5.The Azure File Storage client library v12.x for Python requires Python 2.7 or 3.5.

Zainstaluj za pomocą PyPIInstall via PyPI

Aby zainstalować program za pośrednictwem indeksu pakietów języka Python (PyPI), wpisz:To install via the Python Package Index (PyPI), type:

pip install azure-storage-file-share

Skonfiguruj aplikację do używania Azure FilesSet up your application to use Azure Files

Dodaj następujący element w górnej części pliku źródłowego języka Python, aby użyć fragmentów kodu w tym artykule.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
)

Skonfiguruj połączenie z usługą Azure FilesSet up a connection to Azure Files

ShareServiceClient umożliwia korzystanie z udziałów, katalogów i plików.ShareServiceClient lets you work with shares, directories, and files. Poniższy kod tworzy ShareServiceClient Obiekt przy użyciu parametrów połączenia konta magazynu.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)

Tworzenie udziału plików platformy AzureCreate an Azure file share

Poniższy przykład kodu używa obiektu ShareClient , aby utworzyć udział, jeśli nie istnieje.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)

Tworzenie kataloguCreate a directory

Magazyn można organizować przez umieszczenie plików wewnątrz podkatalogów zamiast wszystkich z nich w katalogu głównym.You can organize storage by putting files inside subdirectories instead of having all of them in the root directory.

Poniższa metoda tworzy katalog w katalogu głównym określonego udziału plików przy użyciu obiektu ShareDirectoryClient .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)

Przekazywanie plikuUpload a file

W tej sekcji dowiesz się, jak przekazać plik z magazynu lokalnego do usługi Azure File Storage.In this section, you'll learn how to upload a file from local storage into Azure File Storage.

Poniższa metoda przekazuje zawartość określonego pliku do określonego katalogu w określonym udziale plików platformy 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)

Wyliczanie plików i katalogów w udziale plików platformy AzureEnumerate files and directories in an Azure file share

Aby wyświetlić listę plików i katalogów w podkatalogu, użyj metody list_directories_and_files .To list the files and directories in a subdirectory, use the list_directories_and_files method. Ta metoda zwraca funkcję autostronicowania.This method returns an auto-paging iterable. Poniższy kod wyprowadza nazwy poszczególnych plików i podkatalogów w określonym katalogu do konsoli programu.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)

Pobieranie plikuDownload a file

Aby pobrać dane z pliku, użyj download_file.To download data from a file, use download_file.

Poniższy przykład ilustruje użycie download_file w celu pobrania zawartości określonego pliku i zapisania jej lokalnie z pobranym parametrem z prefiksem.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)

Tworzenie migawki udziałuCreate a share snapshot

Można utworzyć kopię całego udziału plików w czasie.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)

Wyświetl listę udziałów i migawekList shares and snapshots

Można wyświetlić listę wszystkich migawek dla określonego udziału.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)

Przeglądaj migawkę udziałuBrowse share snapshot

Można przeglądać poszczególne migawki udziałów, aby pobierać pliki i katalogi z tego punktu w czasie.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)

Pobierz plik z migawki udziałuGet file from share snapshot

Plik można pobrać z migawki udziału.You can download a file from a share snapshot. Dzięki temu można przywrócić poprzednią wersję pliku.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)

Usuń migawkę pojedynczego udziałuDelete a single share snapshot

Można usunąć migawkę pojedynczego udziału.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)

Usuwanie plikuDelete a file

Aby usunąć plik, wywołaj 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)

Usuń udział w przypadku istnienia migawek udziałówDelete share when share snapshots exist

Aby usunąć udział zawierający migawki, wywołaj delete_share z 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)

Następne krokiNext steps

Teraz, gdy już wiesz, jak manipulować Azure Files przy użyciu języka Python, Skorzystaj z poniższych linków, aby dowiedzieć się więcej.Now that you've learned how to manipulate Azure Files with Python, follow these links to learn more.