如果我使用以下内容获取所有已连接驱动器的列表:
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
如何获取已连接驱动器的UNC路径?
os.path
只返回z:\
而不是\share\that\was\mapped\to\z
答案 0 :(得分:10)
使用pywin32中的win32wnet转换您的驱动器号。例如:
import win32wnet
import sys
print(win32wnet.WNetGetUniversalName(sys.argv[1], 1))
当我运行它时,这给了我类似的东西:
C:\test>python get_unc.py i:\some\path
\\machine\test_share\some\path
答案 1 :(得分:2)
使用ctypes
以及此帖中第一个答案中显示的代码:Get full computer name from a network drive letter in python,可以获取每个网络驱动器或选定的网络驱动器的驱动器路径。
如果驱动器不是网络驱动器(本地驱动器或可移动驱动器),则给出的get_connection
函数将引发错误,这可以通过
# your drive list
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
for drive in available_drives:
try:
# function from linked post
print(get_connection(drive))
except WindowsError: # thrown from local drives
print('{} is a local drive'.format(drive))
答案 2 :(得分:1)
这是在≥3.4的python中没有依赖关系的方法!*
from pathlib import Path
def unc_drive(file_path):
return str(Path(file_path).resolve())
*注意:我刚刚发现这种方法失败的情况。我公司的网络共享之一具有权限设置,因此此方法引发PermissionError
。在这种情况下,win32wnet.WNetGetUniversalName
是合适的备用。