Python ile Azure Dosyaları için geliştirme

Dosya verilerini depolamak için Azure dosyaları kullanan uygulamaları veya hizmetleri geliştirmek üzere Python kullanma hakkında temel bilgileri öğrenin. Basit 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
  • dosya Upload, indirme ve silme
  • Anlık görüntüler kullanarak dosya paylaşma yedeklemeleri oluşturma

Not

Azure dosyalarına SMB üzerinden erişilebildiğinden, standart Python g/ç sınıfları ve işlevleri kullanılarak Azure dosya paylaşımında erişim sağlayan basit uygulamalar yazmak mümkündür. bu makalede, azure dosyaları ile iletişim sağlamak için azure dosyaları REST API kullanan azure dosyaları Depolama Python SDK 'sını kullanan uygulamaların nasıl yazılacağı açıklanır.

Şunlara uygulanır

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

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

Not

Python sürüm 0,36 veya önceki bir sürümü için Azure Depolama SDK 'dan yükseltiyorsanız, pip uninstall azure-storage en son paketi yüklemeden önce kullanarak eski SDK 'yı kaldırın.

PyPI aracılığıyla yüklemesi

Python paket dizini (Pypı) aracılığıyla yüklemek için şunu yazın:

pip install azure-storage-file-share

Uygulamanızı Azure dosyalarını kullanacak şekilde ayarlama

Bu makaledeki kod parçacıklarını kullanmak için bir Python kaynak dosyasının en üstüne yakınını ekleyin.

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

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

Azure dosyaları ile bağlantı kurma

ShareServiceClient , paylaşımlar, dizinler ve dosyalarla çalışmanıza olanak sağlar. Aşağıdaki kod, ShareServiceClient depolama hesabı bağlantı dizesi kullanarak bir nesnesi 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, yoksa, 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

Dosya dizinlerini kök dizinde kullanmak yerine alt dizinlere yerleştirerek depolamayı düzenleyebilirsiniz.

Aşağıdaki yöntem, bir 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ına dosya yüklemeyi öğreneceksiniz.

Aşağıdaki yöntem belirtilen dosyanın içeriğini belirtilen Azure dosya paylaşımında 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 dosya ve dizinleri listelemek için list_directories_and_files yöntemini kullanın. Bu yöntem bir otomatik sayfalama yinelenebilir döndürür. Aşağıdaki kod, belirtilen dizindeki her bir dosyanın ve alt dizinin adını konsola verir.

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 dosyadaki verileri indirmek için Download_Filekullanın.

Aşağıdaki örnek, download_file belirtilen dosyanın içeriğini almak için kullanımını gösterir ve dosya adı ' na indirilir .

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

Tüm dosya paylaşımınızın zaman içinde bir noktası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şıma ait tüm anlık görüntüleri 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şma anlık görüntüsüne gözatamıyorum

Bu zaman noktasından dosya ve dizinleri almak için her bir paylaşılan anlık görüntüye gözatabilmeniz gerekir.

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

Paylaşım anlık görüntüsünden dosya indirebilirsiniz. Bu, bir dosyanın önceki bir sürümünü geri yüklemenizi sağlar.

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)

Dosyayı silme

Bir dosyayı silmek için 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)

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_share çağrısında bulundu. 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)

Sonraki adımlar

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