Python ile Azure Dosyaları için geliştirme

Dosya verilerini depolamak için Azure Dosyalar kullanan uygulamalar veya hizmetler geliştirmek için Python kullanmanın temellerini öğrenin. Bir konsol uygulaması oluşturun ve Python ve Azure Dosyalar ile temel eylemleri gerçekleştirmeyi öğrenin:

  • Azure dosya paylaşımları oluşturma
  • Dizinleri oluşturma
  • Azure dosya paylaşımındaki dosyaları ve dizinleri listeleme
  • Dosyayı karşıya yükleme, indirme ve silme
  • Anlık görüntüleri kullanarak dosya paylaşımı yedeklemeleri oluşturma

Not

Azure Dosyalar SMB üzerinden erişilebileceği için standart Python G/Ç sınıflarını ve işlevlerini kullanarak Azure dosya paylaşımına erişen basit uygulamalar yazabilirsiniz. Bu makalede, Azure Dosyalar konuşmak için Azure Dosyalar REST API'sini kullanan Python için Azure Depolama SDK'sını kullanan uygulamaların nasıl yazılacağı açıklanır.

Şunlara uygulanır

Dosya paylaşımı türü SMB NFS
Standart dosya paylaşımları (GPv2), LRS/ZRS Yes No
Standart dosya paylaşımları (GPv2), GRS/GZRS Yes No
Premium dosya paylaşımları (filestorage), LRS/ZRS Yes No

Python için Azure Depolama SDK'sını indirme ve yükleme

Not

Python 0.36 veya önceki sürümleri için Azure Depolama SDK'sından yükseltme yapıyorsanız, en son paketi yüklemeden önce kullanarak pip uninstall azure-storage eski SDK'yı kaldırın.

Python için Azure Dosyalar istemci kitaplığı Python 3.8+ gerektirir.

PyPI aracılığıyla yükleme

Python Paket Dizini (PyPI) aracılığıyla yüklemek için şunu yazın:

pip install azure-storage-file-share

Uygulamanızı Azure Dosyalar kullanacak şekilde ayarlama

Bu makaledeki kod parçacıklarını kullanmak için python kaynak dosyasının üst kısmına aşağıdaki kodu ekleyin.

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

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

Azure Dosyalar bağlantısı kurma

ShareServiceClient paylaşımlar, dizinler ve dosyalarla çalışmanızı sağlar. Bu kod, depolama hesabı bağlantı dizesi kullanarak bir ShareServiceClient nesne oluşturur:

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

Azure dosya paylaşımı oluşturma

Aşağıdaki kod örneği, mevcut değilse paylaşımı oluşturmak için bir ShareClient nesnesi kullanır.

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)

Dizin oluşturma

Dosyaları kök dizine yerleştirmek yerine alt dizinlere yerleştirerek depolamayı düzenleyebilirsiniz.

Aşağıdaki yöntem, ShareDirectoryClient nesnesi kullanarak belirtilen dosya paylaşımının kökünde bir dizin oluşturur.

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)

Dosyayı karşıya yükleme

Bu bölümde, yerel depolamadan Azure Dosyalar'a dosya yüklemeyi öğreneceksiniz.

Aşağıdaki yöntem, belirtilen dosyanın içeriğini belirtilen Azure dosya paylaşımındaki belirtilen dizine yükler.

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)

Azure dosya paylaşımındaki dosyaları ve dizinleri listeleme

Bir alt dizindeki dosyaları ve dizinleri listelemek için list_directories_and_files yöntemini kullanın. Bu yöntem otomatik olarak sayfalanabilir bir yinelenebilir döndürür. Aşağıdaki kod, belirtilen dizindeki her dosyanın ve alt dizinin adını konsola çıkarır.

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)

Dosya indirme

Bir dosyadan veri indirmek için download_file kullanın.

Aşağıdaki örnek, belirtilen dosyanın içeriğini almak ve dosya adına ekli DOWNLOADED ile yerel olarak depolamak için komutunu download_file gösterir.

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)

Paylaşım anlık görüntüsü oluşturma

Dosya paylaşımınızın tamamının belirli bir zaman noktası kopyasını oluşturabilirsiniz.

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)

Paylaşımları ve anlık görüntüleri listeleme

Belirli bir paylaşımın tüm anlık görüntülerini listeleyebilirsiniz.

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)

Paylaşım anlık görüntüsüne göz atma

Dosyaları ve dizinleri belirli bir noktadan almak için her paylaşım anlık görüntüsüne göz atabilirsiniz.

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)

Paylaşım anlık görüntüsünden dosya alma

Bir dosyayı paylaşım anlık görüntüsünden indirebilirsiniz. Bu sayede dosyanın önceki bir sürümünü geri yükleyebilirsiniz.

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)

Tek bir paylaşım anlık görüntüsünü silme

Tek bir paylaşım anlık görüntüsünü silebilirsiniz.

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)

Dosya silme

Bir dosyayı silmek için delete_file'ı arayın.

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)

Paylaşım anlık görüntüleri mevcut olduğunda paylaşımı silme

Anlık görüntüler içeren bir paylaşımı silmek için ile delete_snapshots=Truedelete_share çağırın.

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)

Sonraki adımlar

Python ile Azure Dosyalar işlemeyi öğrendiğinize göre daha fazla bilgi edinmek için bu bağlantıları izleyin.

Kullanım dışı bırakılan Python sürüm 2 SDK'larını kullanan ilgili kod örnekleri için bkz . Python sürüm 2'yi kullanan kod örnekleri.