Python-toepassingen ontwikkelen die gebruikmaken van Azure Files
Meer informatie over de basisbeginselen van het gebruik van Python voor het ontwikkelen van apps of services die gebruikmaken van Azure Files om bestandsgegevens op te slaan. Maak een console-app en leer hoe u basisacties uitvoert met Python en Azure Files:
- Azure-bestandsshares maken
- Directory's maken
- Bestanden en mappen opsommen in een Azure-bestandsshare
- Een bestand uploaden, downloaden en verwijderen
- Back-ups van bestandsshares maken met behulp van momentopnamen
Notitie
Omdat Azure Files toegankelijk is via SMB, is het mogelijk om eenvoudige toepassingen te schrijven die toegang hebben tot de Azure-bestandsshare met behulp van de standaard Python I/O-klassen en -functies. In dit artikel wordt beschreven hoe u apps schrijft die gebruikmaken van de Azure Storage SDK voor Python, die gebruikmaakt van de Azure Files REST API om te communiceren met Azure Files.
Van toepassing op
Bestands sharetype | SMB | NFS |
---|---|---|
Standaardbestandsshares (GPv2), LRS/ZRS | ||
Standaardbestandsshares (GPv2), GRS/GZRS | ||
Premium bestandsshares (FileStorage), LRS/ZRS |
Azure Storage SDK voor Python downloaden en installeren
Notitie
Als u een upgrade uitvoert van de Azure Storage SDK voor Python-versie 0.36 of eerder, verwijdert u de oudere SDK met behulp van pip uninstall azure-storage
het nieuwste pakket voordat u het meest recente pakket installeert.
Voor de Azure Files-clientbibliotheek voor Python is Python 3.8+ vereist.
Installeren via PyPI
Als u wilt installeren via de Python Package Index (PyPI), typt u:
pip install azure-storage-file-share
Uw toepassing instellen voor het gebruik van Azure Files
Voeg de volgende code toe aan de bovenkant van een Python-broncodebestand om de codefragmenten in dit artikel te gebruiken.
from azure.core.exceptions import (
ResourceExistsError,
ResourceNotFoundError
)
from azure.storage.fileshare import (
ShareServiceClient,
ShareClient,
ShareDirectoryClient,
ShareFileClient
)
Een verbinding met Azure Files instellen
Met ShareServiceClient kunt u werken met shares, mappen en bestanden. Met deze code maakt u een ShareServiceClient
object met behulp van het opslagaccount verbindingsreeks:
# Create a ShareServiceClient from a connection string
service_client = ShareServiceClient.from_connection_string(connection_string)
Een Azure-bestandsshare maken
In het volgende codevoorbeeld wordt een ShareClient-object gebruikt om de share te maken als deze niet bestaat.
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)
Een map maken
U kunt opslag ordenen door bestanden in submappen te plaatsen in plaats van ze allemaal in de hoofdmap te plaatsen.
Met de volgende methode maakt u een map in de hoofdmap van de opgegeven bestandsshare met behulp van een ShareDirectoryClient-object .
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)
Een bestand uploaden
In deze sectie leert u hoe u een bestand uploadt vanuit lokale opslag naar Azure Files.
Met de volgende methode wordt de inhoud van het opgegeven bestand geüpload naar de opgegeven map in de opgegeven Azure-bestandsshare.
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)
Bestanden en mappen opsommen in een Azure-bestandsshare
Als u de bestanden en mappen in een submap wilt weergeven, gebruikt u de methode list_directories_and_files . Met deze methode wordt een automatische paging-itereerbaar geretourneerd. Met de volgende code wordt de naam van elk bestand en elke submap in de opgegeven map naar de console uitgevoerd.
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)
Een bestand downloaden
Als u gegevens uit een bestand wilt downloaden, gebruikt u download_file.
In het volgende voorbeeld ziet u hoe u download_file
de inhoud van het opgegeven bestand opslaat en lokaal opslaat met DOWNLOADED, voorafgegaan door de bestandsnaam.
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)
Een momentopname van de share maken
U kunt een tijdskopie van uw hele bestandsshare maken.
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)
Shares en momentopnamen weergeven
U kunt alle momentopnamen voor een bepaalde share weergeven.
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)
Momentopname van share bladeren
U kunt door elke momentopname van een share bladeren om bestanden en mappen op te halen vanaf dat moment.
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)
Bestand ophalen uit momentopname van share
U kunt een bestand downloaden van een momentopname van een share, waarmee u een eerdere versie van een bestand kunt herstellen.
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)
Een momentopname van één share verwijderen
U kunt een momentopname van één share verwijderen.
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)
Een bestand verwijderen
Als u een bestand wilt verwijderen, roept u delete_file aan.
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)
Share verwijderen wanneer momentopnamen van shares bestaan
Als u een share wilt verwijderen die momentopnamen bevat, roept u delete_share aan met 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)
Volgende stappen
Nu u hebt geleerd hoe u Azure Files bewerkt met Python, volgt u deze koppelingen voor meer informatie.
- Python Developer Center
- REST-API voor Azure Storage-services
- Microsoft Azure Storage SDK voor Python
Zie Codevoorbeelden met Python versie 2 voor gerelateerde codevoorbeelden met behulp van Python versie 2.