Développer des applications Python qui utilisent Azure Files
Découvrez les notions de base pour développer en Python des applications ou des services qui stockent les données de fichiers avec Azure Files. Créer une application de console et apprendre à effectuer des actions de base avec Python et Azure Files :
- Créer des partages de fichiers Azure
- Créer des répertoires
- Énumérer des fichiers et répertoires dans un partage de fichiers Azure
- Charger, télécharger et supprimer un fichier
- Créer des sauvegardes de partages de fichiers à l’aide d’instantanés
Remarque
Comme Azure Files est accessible sur SMB, vous pouvez écrire des applications simples qui accèdent au partage de fichiers Azure à l’aide des fonctions et classes d’E/S Python standard. Cet article explique comment écrire des applications qui utilisent le kit de développement logiciel (SDK) du Stockage Azure pour Python, lequel s’appuie sur l’API REST Azure Files pour communiquer avec Azure Files.
S’applique à
Type de partage de fichiers | SMB | NFS |
---|---|---|
Partages de fichiers Standard (GPv2), LRS/ZRS | ||
Partages de fichiers Standard (GPv2), GRS/GZRS | ||
Partages de fichiers Premium (FileStorage), LRS/ZRS |
Télécharger et installer le SDK Stockage Azure pour Python
Remarque
Si vous mettez à niveau la version 0.36 ou antérieure du SDK Stockage Azure pour Python, désinstallez l’ancien SDK à l’aide de pip uninstall azure-storage
avant d’installer le dernier package.
La bibliothèque de client Azure Files pour Python nécessite Python 3.8+.
Effectuer l'installation via PyPi
Pour effectuer l’installation via PyPI (Python Package Index), tapez :
pip install azure-storage-file-share
Configurer votre application pour utiliser Azure Files
Ajoutez le code suivant au début d’un fichier source Python pour pouvoir utiliser les extraits de code de cet article.
from azure.core.exceptions import (
ResourceExistsError,
ResourceNotFoundError
)
from azure.storage.fileshare import (
ShareServiceClient,
ShareClient,
ShareDirectoryClient,
ShareFileClient
)
Configurer une connexion à Azure Files
ShareServiceClient permet d’utiliser des partages, des répertoires et des fichiers. Le code crée un objet ShareServiceClient
à l’aide de la chaîne de connexion du compte de stockage :
# Create a ShareServiceClient from a connection string
service_client = ShareServiceClient.from_connection_string(connection_string)
Créer un partage de fichiers Azure
L’exemple de code suivant utilise un objet ShareClient pour créer le partage s’il n’existe pas.
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)
Créer un répertoire
Vous pouvez organiser le stockage en plaçant des fichiers dans des sous-répertoires, plutôt que de tous les mettre dans le répertoire racine.
La méthode suivante permet de créer un répertoire à la racine du partage de fichiers spécifié à l’aide d’un objet 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)
Charger un fichier
Dans cette section, vous apprenez comment charger un fichier à partir du stockage local vers Azure Files.
La méthode suivante permet de charger le contenu du fichier spécifié dans le répertoire indiqué au sein du partage de fichiers Azure prévu.
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)
Énumérer des fichiers et répertoires dans un partage de fichiers Azure
Pour lister les fichiers et les répertoires d’un sous-répertoire, utilisez la méthode list_directories_and_files. Cette méthode retourne un itérable à pagination automatique. Le code suivant donne en sortie dans la console le nom de chacun des fichiers et répertoires du répertoire spécifié.
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)
Téléchargement d’un fichier
Pour télécharger des données à partir d’un fichier, utilisez download_file.
L’exemple suivant montre comment utiliser download_file
pour récupérer le contenu du fichier spécifié et le stocker localement en ajoutant le préfixe DOWNLOADED- au nom de fichier.
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)
Créer un instantané de partage
Vous pouvez créer une copie à un point dans le temps de la totalité de votre partage de fichier.
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)
Répertorier les partages et les instantanés
Vous pouvez répertorier tous les instantanés pour un partage particulier.
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)
Parcourir un instantané de partage
Vous pouvez parcourir chaque instantané de partage pour récupérer les fichiers et les répertoires du point dans le temps correspondant.
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)
Récupérer un fichier d’un instantané de partage
Vous pouvez télécharger un fichier à partir d’un instantané de partage, ce qui vous permet de restaurer une version précédente d’un fichier.
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)
Supprimer un instantané de partage spécifique
Vous pouvez supprimer un instantané de partage spécifique.
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)
Supprimer un fichier
Pour supprimer un fichier, appelez 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)
Supprimer un partage quand existent des instantanés de partage
Pour supprimer un partage contenant des instantanés, appelez delete_share avec 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)
Étapes suivantes
Maintenant que vous avez appris comment manipuler Azure Files avec Python, suivez ces liens pour en savoir plus.
- Centre de développement Python
- API REST des services d’Azure Storage
- Kit de développement logiciel (SDK) Microsoft Azure Storage pour Python
Pour obtenir des exemples de code associés utilisant des Kits de développement logiciel (SDK) Python version 2 déconseillés, consultez l’article Exemples de code utilisant Python version 2.