我正在尝试使用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')
感谢您对高级的帮助!
更新
有点怪,但是我想它能奏效,无论我想知道正确的方法。
要获取网络位置,您可以:
os.chdir(join('//server-01', 'directory', 'filename.txt'))
path = Path()
path = path.resolve()
结果类似于:
>> WindowsPath('//server-01/directory/filename.txt')
path.exists()
>> True
所以这是个好消息。如果有人知道这样做的合法方法,请告诉我。
答案 0 :(得分:1)
如果您将路径创建为:
path = Path('//server-01/directory/filename.txt')
代替逗号分隔每个目录,它将起作用。
答案 1 :(得分:1)
服务器名称本身不是UNC路径的有效组成部分。您还必须包括一个共享。因此path = Path('//server-01/directory', 'file')
将起作用。运行resolve
时,它应该True
并返回path.exists()
。
此处的Microsoft文档:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsc/149a3039-98ce-491a-9268-2f5ddef08192
答案 2 :(得分:0)
将path
实例化为PureWindowsPath
应该可以解决问题:
path = PureWindowsPath("//server-01", "directory", "file") # '\\\\server-01\\directory\\file'
答案 3 :(得分:0)
经过多次尝试,我认为您可以通过以下方式使用 pathlib
访问 smb 文件夹/文件:
folder = pathlib.Path('//server/')
file = pathlib.Path('//server/') / 'relative/path/to/file'
# or
file = pathlib.Path('//server/relative/path/to/file')
关键是如果你想访问一个smb文件夹,arg应该以'/'结尾。