Azure 文件共享 - 递归目录搜索,如 os.walk

Ang*_*Sen 3 azure python-3.x azure-files azure-storage-files

我正在编写一个 Python 脚本来从 Azure 文件共享下载文件。文件共享的结构如下:

/analytics/Part1/file1.txt
/analytics/Part1/file2.txt
/analytics/mainfile.txt
/analytics/Part1/Part1_1/file11.txt
Run Code Online (Sandbox Code Playgroud)

我尝试在脚本中使用以下几行,但它仅在根目录级别查找文件和目录。

/analytics/Part1/file1.txt
/analytics/Part1/file2.txt
/analytics/mainfile.txt
/analytics/Part1/Part1_1/file11.txt
Run Code Online (Sandbox Code Playgroud)

输出是:

/analytics/mainfile.txt  --> File
/analytics/Part1 --> Dir
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找类似os.walk()Python 中的函数的东西来实现这种递归目录遍历。知道 Azure 文件服务 Python API 中是否提供此类功能吗?

Iva*_*ang 10

适用list_directories_and_files()于 Python 的 Azure 存储文件共享客户端库azure-storage-file-share的内置方法仅列出根目录和文件。如果你想要类似的东西os.walk(),你应该自己编写该方法。

在这里,我编写了一个可以递归列出所有文件/目录的函数,并且运行良好(如果不满足您的需要,请随意修改):

from azure.storage.fileshare import ShareServiceClient

def list_recursive(directory_client,directory_name):
    sub_client = directory_client.get_subdirectory_client(directory_name)
    myfiles = sub_client.list_directories_and_files()

    for file in myfiles:
        print(file.get('name'))
        if file.get('is_directory'):
            list_recursive(sub_client,file.get('name'))


if __name__ == '__main__':
    conn_str="xxxx"
    file_service = ShareServiceClient.from_connection_string(conn_str)

    share_client = file_service.get_share_client("your_share_name")
    d_client = share_client.get_directory_client("your_directory_name")
    myfiles = d_client.list_directories_and_files()

    for file in myfiles:
        print(file.get('name'))
        if file.get('is_directory'):
            list_recursive(d_client,file.get('name'))
Run Code Online (Sandbox Code Playgroud)