You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已通过Pywin32连接Windows共享盘,如何递归获取所有文件?

实现共享文件夹递归遍历(类似os.walk)的方法

你已经通过win32net.NetUseAdd建立了共享会话,无需额外映射盘符,直接用UNC路径\\server\shared即可操作,以下是几种可行方案:

方法1:直接用os.walk

共享会话建立后,系统会自动识别UNC路径,直接将共享路径传入os.walk就能实现和本地目录一致的递归遍历:

import os

shared_path = r"\\server\shared"
for root, dirs, files in os.walk(shared_path):
    print(f"当前目录: {root}")
    print(f"子目录列表: {dirs}")
    print(f"文件列表: {files}")

方法2:纯Pywin32 API实现

如果想完全基于Pywin32模块实现,可使用win32file.FindFilesW模拟os.walk的递归逻辑:

import win32file
import win32con

def win32_walk(path):
    # 获取当前目录下的所有项
    handle, file_data = win32file.FindFilesW(path + r"\*")
    win32file.CloseHandle(handle)
    
    dirs = []
    files = []
    for data in file_data:
        filename = data[0]
        if filename in (".", ".."):
            continue
        full_path = fr"{path}\{filename}"
        # 判断是否为目录
        if data[3] & win32con.FILE_ATTRIBUTE_DIRECTORY:
            dirs.append(filename)
            # 递归遍历子目录
            yield from win32_walk(full_path)
        else:
            files.append(filename)
    yield path, dirs, files

# 使用示例
shared_path = r"\\server\shared"
for root, dirs, files in win32_walk(shared_path):
    print(f"当前目录: {root}")
    print(f"子目录列表: {dirs}")
    print(f"文件列表: {files}")

方法3:用pathlib的rglob(简洁写法)

pathlib原生支持UNC路径,通过rglob("*")可递归匹配所有文件和目录,再区分类型即可:

from pathlib import Path

shared_path = Path(r"\\server\shared")
for item in shared_path.rglob("*"):
    if item.is_file():
        print(f"文件: {item}")
    elif item.is_dir():
        print(f"目录: {item}")

内容的提问来源于stack exchange,提问作者Gary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:56:14