已通过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
相关产品推荐
相关产品推荐

