Python中os.listdir()能否列出远程目录?Windows下调用报错求助
解答:os.listdir()访问远程目录的问题
Q1:Python的os.listdir()能列出远程目录吗?
当然可以,但得满足一个关键前提:你的操作系统已经能识别并访问这个远程目录。os.listdir()本身只是调用系统的文件系统接口,所以如果远程目录已经被挂载成本地路径(比如Linux下的mount,Windows下的映射网络驱动器),或者通过UNC路径能直接在系统里访问,那它就能正常工作。反之,如果系统都认不出这个远程路径,Python自然会报错。
Q2:Windows下用UNC路径调用os.listdir()报FileNotFoundError怎么办?
你碰到的这个错误大概率是路径格式问题,或者权限/网络访问的问题,我们一步步来解决:
1. 先修正路径的字符串格式
Windows的UNC路径里的反斜杠\在Python字符串中是转义字符,你直接写的\\servername\d$\...会被Python解析出错。有两种简单的修正方式:
- 使用原始字符串:在路径开头加
r,这样Python就不会解析反斜杠为转义字符:newList = os.listdir(r'\\servername\d$\J2EE\IE\FOIS\jboss-4.2.3.GA\server\all\tmp') - 把所有反斜杠换成双反斜杠:
newList = os.listdir('\\\\servername\\d$\\J2EE\\IE\\FOIS\\jboss-4.2.3.GA\\server\\all\\tmp')
2. 验证权限与网络连通性
- 先试试在Windows资源管理器里输入这个UNC路径,看看能不能正常打开。如果资源管理器都访问不了,那Python肯定也不行——这时候要检查:
- 你的Windows账号有没有访问
\\servername\d$的权限(d$是系统管理员共享,需要管理员权限或者被明确授权的账号); - 目标服务器是否在线,网络连接是否正常,共享设置是否开启。
- 你的Windows账号有没有访问
3. 备选方案:用专门的SMB库
如果上述方法还是行不通,可以考虑用专门处理Windows网络共享的Python库,比如smbprotocol或者pysmb,它们能直接通过SMB协议连接远程共享,不需要依赖系统的路径映射。不过这需要先安装对应的库,比如pip install smbprotocol。
内容的提问来源于stack exchange,提问作者Pravesh Sharma
相关产品推荐
相关产品推荐

