Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como usar Python para criar e gerenciar diretórios e arquivos em contas de armazenamento que têm um namespace hierárquico.
Para saber como obter, definir e atualizar as listas de controle de acesso (ACL) de diretórios e arquivos, consulte Usar Python para gerenciar ACLs no Armazenamento do Azure Data Lake.
Pacote (PyPi) | Exemplos | Referência da API | Mapeamento de Gen1 para Gen2 | Enviar feedback
Pré-requisitos
Uma subscrição do Azure. Veja Obter versão de avaliação gratuita do Azure.
Uma conta de armazenamento com namespace hierárquico habilitado. Siga estas instruções para criar um.
Configure o seu projeto
Esta seção orienta você na preparação de um projeto para trabalhar com a biblioteca de cliente do Armazenamento do Azure Data Lake para Python.
No diretório do projeto, instale pacotes para o Armazenamento do Azure Data Lake e as bibliotecas de cliente do Azure Identity usando o pip install comando. O pacote azure-identity é necessário para conexões sem senha com os serviços do Azure.
pip install azure-storage-file-datalake azure-identity
Em seguida, abra o arquivo de código e adicione as instruções de importação necessárias. Neste exemplo, adicionamos o seguinte ao nosso arquivo .py :
import os
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
Nota
O acesso multiprotocolo no Data Lake Storage permite que os aplicativos usem APIs de Blob e APIs do Data Lake Storage Gen2 para trabalhar com dados em contas de armazenamento com namespace hierárquico (HNS) habilitado. Ao trabalhar com recursos exclusivos do Data Lake Storage Gen2, como operações de diretório e ACLs, use as APIs do Data Lake Storage Gen2, conforme mostrado neste artigo.
Ao escolher quais APIs usar em um determinado cenário, considere a carga de trabalho e as necessidades do seu aplicativo, juntamente com os problemas conhecidos e o impacto do HNS em cargas de trabalho e aplicativos.
Autorizar o acesso e conectar-se a recursos de dados
Para trabalhar com os exemplos de código neste artigo, você precisa criar uma instância DataLakeServiceClient autorizada que represente a conta de armazenamento. Pode autorizar um DataLakeServiceClient objeto usando o Microsoft Entra ID, uma chave de acesso à conta ou uma assinatura de acesso partilhada (SAS).
Você pode usar a biblioteca de cliente de identidade do Azure para Python para autenticar seu aplicativo com o Microsoft Entra ID.
Crie uma instância da classe DataLakeServiceClient e passe um objeto DefaultAzureCredential.
def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
account_url = f"https://{account_name}.dfs.core.windows.net"
token_credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url, credential=token_credential)
return service_client
Para saber mais sobre como usar DefaultAzureCredential para autorizar o acesso a dados, consulte Visão geral: autenticar aplicativos Python no Azure usando o SDK do Azure.
Criar um contentor
Um contêiner atua como um sistema de arquivos para seus arquivos. Você pode criar um contêiner usando o seguinte método:
O seguinte exemplo de código cria um contentor e devolve um objeto FileSystemClient para uso posterior:
def create_file_system(self, service_client: DataLakeServiceClient, file_system_name: str) -> FileSystemClient:
file_system_client = service_client.create_file_system(file_system=file_system_name)
return file_system_client
Criar um diretório
Você pode criar uma referência de diretório no contêiner usando o seguinte método:
O seguinte exemplo de código adiciona um diretório a um contentor e devolve um objeto DataLakeDirectoryClient para uso posterior:
def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
directory_client = file_system_client.create_directory(directory_name)
return directory_client
Renomear ou mover um diretório
Você pode renomear ou mover um diretório usando o seguinte método:
Indique o caminho com o novo nome do diretório no argumento new_name. O valor deve ter o seguinte formato: {filesystem}/{directory}/{subdirectory}.
O exemplo de código a seguir mostra como renomear um subdiretório:
def rename_directory(self, directory_client: DataLakeDirectoryClient, new_dir_name: str):
directory_client.rename_directory(
new_name=f"{directory_client.file_system_name}/{new_dir_name}")
Carregar um ficheiro para um diretório
Você pode carregar conteúdo para um arquivo novo ou existente usando o seguinte método:
O exemplo de código a seguir mostra como carregar um arquivo para um diretório usando o método upload_data :
def upload_file_to_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
file_client = directory_client.get_file_client(file_name)
with open(file=os.path.join(local_path, file_name), mode="rb") as data:
file_client.upload_data(data, overwrite=True)
Pode utilizar este método para criar e carregar conteúdo para um novo ficheiro, ou pode definir o argumento overwrite como True para substituir um ficheiro existente.
Acrescentar dados a um ficheiro
Para adicionar dados a um ficheiro, use o seguinte método:
- método DataLakeFileClient.append_data.
O seguinte exemplo de código mostra como adicionar dados ao final de um ficheiro usando estes passos:
- Cria um objeto DataLakeFileClient para representar o recurso de ficheiro com que estás a trabalhar.
- Carrega os dados para o ficheiro usando o método append_data .
- Conclua o upload chamando o método flush_data para gravar os dados carregados anteriormente no arquivo.
def append_data_to_file(self, directory_client: DataLakeDirectoryClient, file_name: str):
file_client = directory_client.get_file_client(file_name)
file_size = file_client.get_file_properties().size
data = b"Data to append to end of file"
file_client.append_data(data, offset=file_size, length=len(data))
file_client.flush_data(file_size + len(data))
Com esse método, os dados só podem ser anexados a um arquivo e a operação é limitada a 4000 MiB por solicitação.
Download de um diretório
O seguinte exemplo de código mostra como descarregar um ficheiro de um diretório para um ficheiro local usando estes passos:
- Crie um objeto DataLakeFileClient para representar o ficheiro que pretende descarregar.
- Abra um arquivo local para gravação.
- Chame o método DataLakeFileClient.download_file para ler do ficheiro e depois escreva os dados no ficheiro local.
def download_file_from_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
file_client = directory_client.get_file_client(file_name)
with open(file=os.path.join(local_path, file_name), mode="wb") as local_file:
download = file_client.download_file()
local_file.write(download.readall())
local_file.close()
Listar conteúdo do diretório
Você pode listar o conteúdo do diretório usando o seguinte método e enumerando o resultado:
Listar os caminhos no resultado pode efetuar vários pedidos ao serviço ao obter os valores.
O exemplo de código a seguir imprime o caminho de cada subdiretório e arquivo localizado em um diretório:
def list_directory_contents(self, file_system_client: FileSystemClient, directory_name: str):
paths = file_system_client.get_paths(path=directory_name)
for path in paths:
print(path.name + '\n')
Eliminar um diretório
Você pode excluir um diretório usando o seguinte método:
O exemplo de código a seguir mostra como excluir um diretório:
def delete_directory(self, directory_client: DataLakeDirectoryClient):
directory_client.delete_directory()