Sviluppare applicazioni Python che usano File di Azure
Informazioni di base sull'uso di Python per sviluppare app o servizi che usano File di Azure per archiviare i dati dei file. Creare un'app console e imparare a eseguire azioni di base con Python e File di Azure:
- Creare condivisioni file di Azure
- Creare directory
- Enumerare file e directory in una condivisione file di Azure
- Caricare, scaricare ed eliminare un file
- Creare backup di condivisione file usando gli snapshot
Nota
Poiché è possibile accedere File di Azure tramite SMB, è possibile scrivere semplici applicazioni che accedono alla condivisione file di Azure usando le classi e le funzioni di I/O Python standard. Questo articolo descrive come scrivere app che usano Archiviazione di Azure SDK per Python, che usa l'API REST File di Azure per comunicare con File di Azure.
Si applica a
Tipo di condivisione file | SMB | NFS |
---|---|---|
Condivisioni file Standard (GPv2), archiviazione con ridondanza locale/archiviazione con ridondanza della zona | ||
Condivisioni file Standard (GPv2), archiviazione con ridondanza geografica/archiviazione con ridondanza geografica della zona | ||
Condivisioni file Premium (FileStorage), archiviazione con ridondanza locale/archiviazione con ridondanza della zona |
Scaricare e installare Azure Storage SDK per Python
Nota
Se si esegue l'aggiornamento da Archiviazione di Azure SDK per Python versione 0.36 o precedenti, disinstallare l'SDK precedente usando pip uninstall azure-storage
prima di installare il pacchetto più recente.
La libreria client File di Azure per Python richiede Python 3.8+.
Eseguire l'installazione tramite PyPI
Per eseguire l'installazione tramite Python Package Index (PyPI), digitare:
pip install azure-storage-file-share
Configurare l'applicazione per usare File di Azure
Aggiungere il codice seguente all'inizio di un file di origine Python per usare i frammenti di codice in questo articolo.
from azure.core.exceptions import (
ResourceExistsError,
ResourceNotFoundError
)
from azure.storage.fileshare import (
ShareServiceClient,
ShareClient,
ShareDirectoryClient,
ShareFileClient
)
Configurare una connessione a File di Azure
ShareServiceClient consente di usare condivisioni, directory e file. Questo codice crea un ShareServiceClient
oggetto usando l'account di archiviazione stringa di connessione:
# Create a ShareServiceClient from a connection string
service_client = ShareServiceClient.from_connection_string(connection_string)
Creare una condivisione file di Azure
Nell'esempio di codice seguente viene usato un oggetto ShareClient per creare la condivisione se non esiste.
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)
Creare una directory
È possibile organizzare l'archiviazione inserendo i file all'interno di sottodirectory anziché inserirli tutti nella directory radice.
Il metodo seguente crea una directory nella radice della condivisione file specificata usando un oggetto 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)
Caricare un file
In questa sezione viene illustrato come caricare un file dall'archiviazione locale in File di Azure.
Il metodo seguente carica il contenuto del file specificato nella directory specificata nella condivisione file di Azure specificata.
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)
Enumerare file e directory in una condivisione file di Azure
Per elencare i file e le directory in una sottodirectory, usare il metodo list_directories_and_files . Questo metodo restituisce un'iterabile di paging automatico. Il codice seguente restituisce il nome di ogni file e sottodirectory nella directory specificata nella console.
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)
Scaricare un file
Per scaricare dati da un file, usare download_file.
Nell'esempio seguente viene illustrato l'uso download_file
di per ottenere il contenuto del file specificato e archiviarlo in locale con DOWNLOADED- anteporto al nome file.
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)
Creare uno snapshot della condivisione
È possibile creare una copia temporizzata dell'intera condivisione file.
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)
Elencare condivisioni e snapshot
È possibile elencare tutti gli snapshot per una particolare condivisione.
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)
Esplorare uno snapshot di condivisione
È possibile esplorare ogni snapshot di condivisione per recuperare file e directory da quel momento.
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)
Ottenere file da uno snapshot di condivisione
È possibile scaricare un file da uno snapshot di condivisione, che consente di ripristinare una versione precedente di un file.
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)
Eliminare un singolo snapshot di condivisione
È possibile eliminare un singolo snapshot di condivisione.
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)
Eliminare un file
Per eliminare un file, chiamare 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)
Eliminare una condivisione in presenza di snapshot di condivisione
Per eliminare una condivisione contenente snapshot, chiamare delete_share con 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)
Passaggi successivi
Dopo aver appreso come interagire con File di Azure con Python, selezionare i collegamenti seguenti per altre informazioni.
- Centro per sviluppatori Python
- API REST dei servizi di archiviazione di Azure
- Microsoft Azure Storage SDK per Python
Per esempi di codice correlati che usano SDK di Python versione 2 deprecati, vedere Esempi di codice con Python versione 2.