如何用Python访问Windows目录链接指向的文件?
Windows目录链接在Python中无法访问的解决方案
先搞清楚你创建的是哪种链接
Windows里手动做的“目录链接”分两种,本质完全不一样:
- 右键创建的快捷方式(.lnk文件):这不是真正的系统级链接,就是个记录目标路径的小文件,os模块会把它当普通文件处理,所以
os.listdir()会报错“不是目录”,os.path.islink()也返回False。 - 用
mklink命令创建的符号链接:比如在命令行输入mklink /D Tests\Images Database\Images,这才是系统认可的目录链接,os模块能正常识别。
如果是快捷方式(.lnk)的解决办法
要读取快捷方式的目标路径,得用Windows的COM接口解析,借助pywin32库实现:
import win32com.client import os def get_shortcut_target(shortcut_path): shell = win32com.client.Dispatch("WScript.Shell") shortcut = shell.CreateShortCut(shortcut_path) return shortcut.Targetpath # 获取当前脚本所在目录下的Images快捷方式路径 shortcut_path = os.path.join(os.getcwd(), "Images") # 解析出真实目标目录 target_dir = get_shortcut_target(shortcut_path) # 现在可以正常访问目标目录内的文件 if os.path.isdir(target_dir): print(os.listdir(target_dir))
先安装依赖:pip install pywin32
如果是符号链接但仍无法识别的解决办法
- 用管理员权限运行脚本:Windows下读取符号链接可能需要管理员权限,右键终端选择「以管理员身份运行」后再执行脚本。
- 改用pathlib模块:Python 3.4+的
pathlib对Windows符号链接支持更友好:
from pathlib import Path import os link_path = Path("./Images") # 解析出真实路径 real_directory = link_path.resolve() print(os.listdir(real_directory))
- 检查链接创建是否正确:打开命令行输入
dir Tests\Images,如果输出开头是<SYMLINKD>,说明链接创建正常;若不是,重新用mklink /D命令创建。
内容的提问来源于stack exchange,提问作者Guillermo López
相关产品推荐
相关产品推荐

