从python中的网络驱动器号获取完整的计算机名

2024-09-30 06:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python填充一个表,其中包含许多存储文件的文件路径。然而,路径需要有完整的网络驱动器计算机名,而不仅仅是驱动器号,即

//计算机名/文件夹/子文件夹/文件

不是

p:/文件夹/子文件夹/文件

我使用win32api、win32file和操作系统路径模块,但没有什么是它能做的。我需要类似win32api.GetComputerName()的东西,但是它能够将已知的驱动器号作为参数,并返回映射到该驱动器号的计算机名。在

那么在python中有没有查找驱动器号并返回计算机名的方法呢?在


Tags: 模块文件方法路径网络文件夹参数计算机
3条回答

我想你只需要看看pywin32的更多内容。。。正如您看到的here,已经有一个API可以将本地驱动器名转换为完整的UNC路径。在

为了完整起见,这里有一些适合我的代码。在

import win32wnet
import sys

print(win32wnet.WNetGetUniversalName(sys.argv[1], 1))

当我运行它时,它给了我这样的信息:

^{pr2}$

使用导出的Windows NetworkingAPI映射网络驱动器mpr.dll(多提供商路由器)。您可以通过^{}创建网络驱动器。要获取与本地设备关联的远程路径,请调用^{}。可以使用ctypes执行此操作,如下所示:

import ctypes
from ctypes import wintypes

mpr = ctypes.WinDLL('mpr')

ERROR_SUCCESS   = 0x0000
ERROR_MORE_DATA = 0x00EA

wintypes.LPDWORD = ctypes.POINTER(wintypes.DWORD)
mpr.WNetGetConnectionW.restype = wintypes.DWORD
mpr.WNetGetConnectionW.argtypes = (wintypes.LPCWSTR,
                                   wintypes.LPWSTR,
                                   wintypes.LPDWORD)

def get_connection(local_name):
    length = (wintypes.DWORD * 1)()
    result = mpr.WNetGetConnectionW(local_name, None, length)
    if result != ERROR_MORE_DATA:
        raise ctypes.WinError(result)
    remote_name = (wintypes.WCHAR * length[0])()
    result = mpr.WNetGetConnectionW(local_name, remote_name, length)
    if result != ERROR_SUCCESS:
        raise ctypes.WinError(result)
    return remote_name.value

例如:

^{pr2}$

我对similar question的回答:

下面是如何在python≥3.4中实现它,并且没有依赖关系!*在

from pathlib import Path

def unc_drive(file_path):
    return str(Path(file_path).resolve())

*注:我刚发现这种方法失败的情况。我公司的一个网络共享具有权限设置,因此此方法引发一个PermissionError。在这种情况下,win32wnet.WNetGetUniversalName是一个合适的回退。在

相关问题 更多 >

    热门问题