Vývoj aplikací Pythonu, které používají Azure Files
Seznamte se se základy používání Pythonu k vývoji aplikací nebo služeb, které používají Azure Files k ukládání dat souborů. Vytvořte konzolovou aplikaci a naučte se provádět základní akce pomocí Pythonu a Azure Files:
- Vytvoření sdílených složek Azure
- Odstraňování adresářů
- Vytvoření výčtu souborů a adresářů ve sdílené složce Azure
- Nahrání, stažení a odstranění souboru
- Vytváření záloh sdílených složek pomocí snímků
Poznámka:
Vzhledem k tomu, že služba Soubory Azure je možná přístupná přes protokol SMB, je možné psát jednoduché aplikace, které přistupují ke sdílené složce Azure pomocí standardních vstupně-výstupních tříd a funkcí Pythonu. Tento článek popisuje, jak psát aplikace, které používají sadu Azure Storage SDK pro Python, která používá rozhraní REST API služby Azure Files ke komunikaci se službou Azure Files.
Platí pro
Typ sdílené složky | SMB | NFS |
---|---|---|
Sdílené složky úrovně Standard (GPv2), LRS/ZRS | ||
Sdílené složky úrovně Standard (GPv2), GRS/GZRS | ||
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS |
Stažení a instalace sady Azure Storage SDK pro Python
Poznámka:
Pokud upgradujete ze sady Azure Storage SDK pro Python verze 0.36 nebo starší, odinstalujte starší sadu SDK před pip uninstall azure-storage
instalací nejnovějšího balíčku.
Klientská knihovna Azure Files pro Python vyžaduje Python 3.8 nebo novější.
Instalace přes PyPI
Pokud chcete provést instalaci prostřednictvím indexu balíčků Pythonu (PyPI), zadejte:
pip install azure-storage-file-share
Nastavení aplikace pro použití služby Azure Files
Do horní části zdrojového souboru Pythonu přidejte následující kód pro použití fragmentů kódu v tomto článku.
from azure.core.exceptions import (
ResourceExistsError,
ResourceNotFoundError
)
from azure.storage.fileshare import (
ShareServiceClient,
ShareClient,
ShareDirectoryClient,
ShareFileClient
)
Nastavení připojení ke službě Azure Files
ShareServiceClient umožňuje pracovat se sdílenými složkami, adresáři a soubory. Tento kód vytvoří ShareServiceClient
objekt pomocí účtu úložiště připojovací řetězec:
# Create a ShareServiceClient from a connection string
service_client = ShareServiceClient.from_connection_string(connection_string)
Vytvoření sdílené složky Azure
Následující příklad kódu používá objekt ShareClient k vytvoření sdílené složky, pokud neexistuje.
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)
Vytvoření adresáře
Úložiště můžete uspořádat tak, že soubory umístíte do podadresářů, a nemusíte je mít všechny v kořenovém adresáři.
Následující metoda vytvoří adresář v kořenovém adresáři zadané sdílené složky pomocí objektu ShareDirectoryClient .
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)
Odeslání souboru
V této části se dozvíte, jak nahrát soubor z místního úložiště do služby Azure Files.
Následující metoda nahraje obsah zadaného souboru do zadaného adresáře v zadané sdílené složce Azure.
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)
Vytvoření výčtu souborů a adresářů ve sdílené složce Azure
K výpisu souborů a adresářů v podadresáři použijte metodu list_directories_and_files . Tato metoda vrátí iterovatelné automatické stránkování. Následující kód vypíše název každého souboru a podadresáře v zadaném adresáři do konzoly.
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)
Stažení souboru
Pokud chcete stáhnout data ze souboru, použijte download_file.
Následující příklad ukazuje použití download_file
k získání obsahu zadaného souboru a jeho místní uložení s předponou DOWNLOADED - předem na název souboru.
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)
Vytvoření snímku sdílené složky
Můžete vytvořit kopii celé sdílené složky k určitému bodu v čase.
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)
Výpis sdílených složek a snímků
Můžete zobrazit seznam všech snímků pro určitou sdílenou složku.
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)
Procházení snímku sdílené složky
Každý snímek sdílené složky můžete procházet a načítat soubory a adresáře z tohoto bodu v čase.
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)
Získání souboru ze snímku sdílené složky
Soubor si můžete stáhnout ze snímku sdílené složky, který umožňuje obnovit předchozí verzi souboru.
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)
Odstranění jednoho snímku sdílené složky
Můžete odstranit jeden snímek sdílené složky.
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)
Odstranění souboru
Pokud chcete odstranit soubor, zavolejte 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)
Odstranění sdílené složky, když existují snímky sdílené složky
Pokud chcete odstranit sdílenou složku, která obsahuje snímky, zavolejte delete_share s 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)
Další kroky
Teď, když jste se naučili pracovat se soubory Azure pomocí Pythonu, najdete další informace pomocí těchto odkazů.
- Středisko pro vývojáře programující v Pythonu
- REST API služby Azure Storage
- Microsoft Azure Storage SDK pro Python
Související ukázky kódu s využitím zastaralých sad SDK pro Python verze 2 najdete v ukázkách kódu s využitím Pythonu verze 2.