Azure Dosyalar kullanan Python uygulamaları 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ıldığı açıklanmaktadır.
Şunlara uygulanır
Dosya paylaşımı türü | SMB | NFS |
---|---|---|
Standart dosya paylaşımları (GPv2), LRS/ZRS | ||
Standart dosya paylaşımları (GPv2), GRS/GZRS | ||
Premium dosya paylaşımları (filestorage), LRS/ZRS |
Python için Azure Depolama SDK'sını indirme ve yükleme
Not
Python sürüm 0.36 veya öncesi 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=True
delete_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.
- Python Geliştirici Merkezi
- Azure Depolama Hizmetleri REST API'si
- Python için Microsoft Azure Depolama SDK
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.