使用 pathlib 访问网络文件位置

Accessing networked file locations with pathlib

我正在尝试使用 Python 的 pathlib 模块测试程序。使用 os 模块,您过去只需遵循相同的 url 形式即可访问网络驱动器。但出于某种原因,您不能使用 pathlib 执行此操作。或者至少我不知道该怎么做。

有了 os 模块,所有需要做的就是:

path = os.path.join(r'//server-01', 'directory', 'filename.txt')

但是如果您尝试使用 pathlib 模块来执行此操作,则可以尝试类似的操作:

path = Path('//server-01', 'directory', 'filename.txt')

如果我在 Windows 机器上,路径将解析为:

>> WindowsPath('/server-01/directory/filename.txt)

如果我说path.exists(),我当然会得到False。因为是的,/server-01 不存在,但是 //server-01 存在。

当然,理想情况下,当我 运行 path.exists() 时我希望得到的结果是 True 如果我要显示 path 它看起来像:

>> WindowsPath('//server-01/directory/filename.txt')

更新

有点hacky,但我想它是有效的,不管我想知道正确的方法。

为了到达网络位置,您可以:

os.chdir(join(r'//server-01', 'directory', 'filename.txt'))
path = Path()
path = path.resolve()

结果类似于:

>> WindowsPath('//server-01/directory/filename.txt')
path.exists()
>> True

如果有人知道更好的方法,请告诉我。

path 实例化为 PureWindowsPath 应该可以解决问题:

path = PureWindowsPath("//server-01", "directory", "file") # '\\server-01\directory\file'

如果您将路径创建为:

path = Path('//server-01/directory/filename.txt')

它可以代替逗号分隔每个目录。

服务器名称本身不是 UNC 路径的有效组成部分。您还必须包括份额。所以 path = Path('//server-01/directory', 'file') 会起作用。它应该 resolve 和 return True 当你 运行 path.exists().

微软文档在这里:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsc/149a3039-98ce-491a-9268-2f5ddef08192

经过多次尝试,我认为您可以通过以下方式通过 pathlib 访问 smb folder/file:

folder = pathlib.Path('//server/')

file = pathlib.Path('//server/') / 'relative/path/to/file'
# or
file = pathlib.Path('//server/relative/path/to/file')

关键是如果你想访问smb文件夹,arg应该以'/'结尾。