使用pathlib

时间:2019-05-08 15:40:40

标签: python 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')

感谢您对高级的帮助!

更新

有点怪,但是我想它能奏效,无论我想知道正确的方法。

要获取网络位置,您可以:

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

结果类似于:

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

所以这是个好消息。如果有人知道这样做的合法方法,请告诉我。

4 个答案:

答案 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应该以'/'结尾。

相关问题