Python 3.6.5在Windows 10下读取符号链接文件的实现方法
解决Windows 10 Python 3.6.5无法读取符号链接的问题
我之前在Windows上用Python 3.6处理符号链接时也踩过一模一样的坑!MacOS默认会自动跟随symlink,但Python 3.6.x在Windows平台确实存在这个兼容性问题,给你几个实用的解决办法:
方法1:手动解析符号链接的真实路径
用os.path.realpath()先获取链接指向的真实文件路径,再打开文件,这是跨平台通用的方案:
import os # 符号链接的路径 link_file = "FileA.txt" # 解析出真实目标路径 real_file_path = os.path.realpath(link_file) with open(real_file_path) as f: print(f.read())
os.path.realpath()会自动处理Windows和Mac上的符号链接,帮你定位到真正的目标文件,完美规避版本差异问题。
方法2:升级Python版本到3.7+
Python 3.7及以后的版本已经修复了Windows平台下open()函数无法跟随符号链接的bug,升级后你原来的代码就能直接正常运行,不用做任何修改。如果项目允许升级版本,这是最省心的解决方案。
方法3:确保创建的是真正的符号链接(而非快捷方式)
有时候报错是因为你创建的不是真正的Windows符号链接,而是普通的.lnk快捷方式——这种情况下Python会把它当成无效文件处理。
创建真正的符号链接需要管理员权限:
- 右键命令提示符,选择「以管理员身份运行」
- 进入DirectoryB目录,执行命令:
mklink FileA.txt "../FileA.txt"
(如果是创建目录符号链接,记得加/D参数:mklink /D DirLink ../TargetDir)
补充说明
Python 3.6及更早版本在Windows上,open()函数默认不支持解析符号链接,加上Windows的符号链接机制和Unix系(比如MacOS)不同,没有管理员权限创建的往往是快捷方式而非真正的symlink,这两个因素叠加就会导致你遇到的OSError: [Errno 22] Invalid argument错误。
内容的提问来源于stack exchange,提问作者Ogen
相关产品推荐
相关产品推荐

