使用 Python 针对 Azure 文件进行开发

Tip

尝试 Azure 存储资源管理器

Azure 存储资源管理器是 Microsoft 免费提供的独立应用,适用于在 Windows、macOS 和 Linux 上以可视方式处理 Azure 存储数据。

关于本教程

本教程将演示使用 Python 开发应用程序或服务的基本信息,这些程序或服务可使用 Azure 文件存储文件数据。 在本教程中,我们将创建一个简单的控制台应用程序,并演示如何通过 Python 和 Azure 文件执行基本操作:

  • 创建 Azure 文件共享
  • 创建目录
  • 枚举 Azure 文件共享中的文件和目录
  • 上传、下载和删除文件

Note

由于 Azure 文件可通过 SMB 进行访问,因此可编写简单的应用程序,通过标准 Python I/O 类和函数访问 Azure 文件共享。 本文将介绍如何编写使用 Azure 存储 Python SDK 的应用程序,该 SDK 使用 Azure 文件 REST API 与 Azure 文件通信。

下载和安装适用于 Python 的 Azure 存储 SDK

适用于 Python 的 Azure 存储 SDK 需要 Python 2.7、3.3、3.4、3.5 或 3.6,并且包含 4 个不同包:azure-storage-blobazure-storage-fileazure-storage-tableazure-storage-queue。 在本教程中,我们要用到 azure-storage-file 包。

通过 PyPi 安装

要通过 Python 包索引 (PyPI) 安装,请键入:

pip install azure-storage-file

Note

如果要从用于 Python 的 Azure 存储 SDK 版本 0.36 或更早版本升级,首先需要使用 pip uninstall azure-storage 进行卸载,因为我们不再通过单个包的形式发布用于 Python 的存储 SDK 了。

有关备用安装方法,请访问 Github 上用于 Python 的 Azure 存储 SDK

设置应用程序以使用 Azure 文件

在希望在其中以编程方式访问 Azure 存储的任何 Python 源文件中,将以下代码添加到文件的顶部附近:

from azure.storage.file import FileService

设置与 Azure 文件的连接

通过 FileService 对象,可使用共享、目录和文件。 以下代码使用存储帐户名称和帐户密钥创建一个 FileService 对象。 将 <myaccount><mykey> 替换为自己的帐户名和密钥。

file_service = FileService(account_name='myaccount', account_key='mykey')

创建 Azure 文件共享

在以下代码示例中,如果共享不存在,可以使用 FileService 对象来创建它。

file_service.create_share('myshare')

创建目录

也可将文件置于子目录中,而不是将其全部置于根目录中,以便对存储进行有效的组织。 使用 Azure 文件可以创建帐户允许的任意数目的目录。 以下代码在根目录下创建名为 sampledir 的子目录。

file_service.create_directory('myshare', 'sampledir')

枚举 Azure 文件共享中的文件和目录

若要列出共享中的文件和目录,请使用 list_directories_and_files 方法。 此方法会返回一个生成器。 以下代码将共享中每个文件和目录的名称输出到控制台。

generator = file_service.list_directories_and_files('myshare')
for file_or_dir in generator:
    print(file_or_dir.name)

上传文件

Azure 文件共享至少包含文件所在的根目录。 本部分会介绍如何将文件从本地存储上传到共享所在的根目录。

若要创建文件并上传数据,请使用 create_file_from_pathcreate_file_from_streamcreate_file_from_bytescreate_file_from_text 方法。 这些方法属于高级方法,在数据大小超过 64 MB 时执行必要的分块。

create_file_from_path 从指定路径上传文件内容,create_file_from_stream 从已经打开的文件/流上传内容。 create_file_from_bytes 上传字节数组,create_file_from_text 使用指定的编码(默认为 UTF-8)上传指定的文本值。

下面的示例将 sunset.png 文件的内容上传到 myfile 文件中。

from azure.storage.file import ContentSettings
file_service.create_file_from_path(
    'myshare',
    None, # We want to create this blob in the root directory, so we specify None for the directory_name
    'myfile',
    'sunset.png',
    content_settings=ContentSettings(content_type='image/png'))

下载文件

若要从文件中下载数据,请使用 get_file_to_pathget_file_to_streamget_file_to_bytesget_file_to_text。 这些方法属于高级方法,在数据大小超过 64 MB 时执行必要的分块。

以下示例演示如何使用 get_file_to_path 下载 myfile 文件的内容,并将其存储到 out-sunset.png 文件。

file_service.get_file_to_path('myshare', None, 'myfile', 'out-sunset.png')

删除文件

最后,若要删除文件,请调用 delete_file

file_service.delete_file('myshare', None, 'myfile')

后续步骤

了解如何使用 Python 操作 Azure 文件后,请单击以下链接了解更多信息。