Utveckla för Azure Files med Python

Lär dig grunderna i att använda Python för att utveckla appar eller tjänster som använder Azure Files för att lagra fildata. Skapa en konsolapp och lär dig hur du utför grundläggande åtgärder med Python och Azure Files:

  • Skapa Azure-filresurser
  • Skapa kataloger
  • Räkna upp filer och kataloger i en Azure-filresurs
  • Ladda upp, ladda ned och ta bort en fil
  • Skapa säkerhetskopior av filresurser med hjälp av ögonblicksbilder

Kommentar

Eftersom Azure Files kan nås via SMB är det möjligt att skriva enkla program som har åtkomst till Azure-filresursen med hjälp av standardklasser och funktioner för Python I/O. Den här artikeln beskriver hur du skriver appar som använder Azure Storage SDK för Python, som använder Rest-API:et för Azure Files för att prata med Azure Files.

Gäller för

Typ av filresurs SMB NFS
Standardfilresurser (GPv2), LRS/ZRS Yes No
Standardfilresurser (GPv2), GRS/GZRS Yes No
Premiumfilresurser (FileStorage), LRS/ZRS Yes No

Ladda ned och installera Azure Storage SDK för Python

Kommentar

Om du uppgraderar från Azure Storage SDK för Python version 0.36 eller tidigare avinstallerar du det äldre SDK:t med innan pip uninstall azure-storage du installerar det senaste paketet.

Azure Files-klientbiblioteket för Python kräver Python 3.8+.

Installera via PyPI

Om du vill installera via Python Package Index (PyPI) skriver du:

pip install azure-storage-file-share

Konfigurera ditt program så att det använder Azure Files

Lägg till följande kod längst upp i en Python-källfil för att använda kodfragmenten i den här artikeln.

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

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

Konfigurera en anslutning till Azure Files

Med ShareServiceClient kan du arbeta med resurser, kataloger och filer. Den här koden skapar ett ShareServiceClient objekt med lagringskontot anslutningssträng:

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

Skapa en Azure-filresurs

I följande kodexempel används ett ShareClient-objekt för att skapa resursen om den inte finns.

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)

Skapa en katalog

Du kan ordna lagring genom att placera filer i underkataloger i stället för att ha alla i rotkatalogen.

Följande metod skapar en katalog i roten för den angivna filresursen med hjälp av ett ShareDirectoryClient-objekt .

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)

Ladda upp en fil

I det här avsnittet får du lära dig hur du laddar upp en fil från lokal lagring till Azure Files.

Följande metod laddar upp innehållet i den angivna filen till den angivna katalogen i den angivna Azure-filresursen.

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)

Räkna upp filer och kataloger i en Azure-filresurs

Om du vill visa en lista över filer och kataloger i en underkatalog använder du metoden list_directories_and_files . Den här metoden returnerar en iterbar automatisk växling. Följande kod matar ut namnetvarje fil och underkatalog i den angivna katalogen till konsolen.

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)

Ladda ned en fil

Om du vill ladda ned data från en fil använder du download_file.

I följande exempel visas hur du använder download_file för att hämta innehållet i den angivna filen och lagra den lokalt med DOWNLOADED – som är förberedd till filnamnet.

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)

Skapa en ögonblicksbild av en resurs

Du kan skapa en tidpunktskopia av hela filresursen.

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)

Lista resurser och ögonblicksbilder

Du kan lista alla ögonblicksbilder för en viss resurs.

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)

Bläddra bland resursögonblicksbilder

Du kan bläddra i varje resursögonblicksbild för att hämta filer och kataloger från den tidpunkten.

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)

Hämta fil från resursögonblicksbild

Du kan ladda ned en fil från en resursögonblicksbild, vilket gör att du kan återställa en tidigare version av en fil.

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)

Ta bort en ögonblicksbild av en enskild resurs

Du kan ta bort en ögonblicksbild av en enskild resurs.

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)

Ta bort en fil

Om du vill ta bort en fil anropar du 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)

Ta bort resurs när resursögonblicksbilder finns

Om du vill ta bort en resurs som innehåller ögonblicksbilder anropar du delete_share med 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)

Nästa steg

Nu när du har lärt dig hur du manipulerar Azure Files med Python följer du dessa länkar för att lära dig mer.

Relaterade kodexempel med inaktuella SDK:er för Python version 2 finns i Kodexempel med Python version 2.