Python2:从盘符获取网络共享路径
Python 2: Get network share path from drive letter
如果我使用以下命令获取所有已连接驱动器的列表:
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
如何获取已连接驱动器的 UNC 路径?
os.path
只是 returns z:\
而不是 \share\that\was\mapped\to\z
使用 ctypes
和此 post 中第一个答案中显示的代码: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))
使用 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
以下是在 python ≥ 3.4 中的操作方法,没有依赖项!*
from pathlib import Path
def unc_drive(file_path):
return str(Path(file_path).resolve())
*注:我刚刚发现这种方法失败的情况。我公司的网络共享之一具有权限设置,因此此方法引发 PermissionError
。在这种情况下,win32wnet.WNetGetUniversalName
是一个合适的后备方案。
如果我使用以下命令获取所有已连接驱动器的列表:
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
如何获取已连接驱动器的 UNC 路径?
os.path
只是 returns z:\
而不是 \share\that\was\mapped\to\z
使用 ctypes
和此 post 中第一个答案中显示的代码: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))
使用 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
以下是在 python ≥ 3.4 中的操作方法,没有依赖项!*
from pathlib import Path
def unc_drive(file_path):
return str(Path(file_path).resolve())
*注:我刚刚发现这种方法失败的情况。我公司的网络共享之一具有权限设置,因此此方法引发 PermissionError
。在这种情况下,win32wnet.WNetGetUniversalName
是一个合适的后备方案。