使用pathlib访问网络文件位置

15

我正在尝试使用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(r'//server-01', 'directory', 'filename.txt'))
path = Path()
path = path.resolve()

结果大致是这样的:

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

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


1
在这种情况下PureWindowsPath有效吗? - Denis Rasulev
似乎并不是这样。我认为问题在于即使在文档中,它也说无论你做什么,它都会将多个斜杠折叠成一个。如果您查看文档中的其中一个代码块,它就演示了这一点。由于PureWindowsPath对象继承自PurePath,因此它应该具有相同的特性。 - Alex
4个回答

8
如果您将路径创建为:
path = Path('//server-01/directory/filename.txt')

不需要使用逗号分隔每个目录,它也能正常工作。


6

3

经过多次尝试,我认为您可以通过使用 pathlib 访问 smb 文件/文件夹:

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

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

关键是,如果你想访问一个SMB文件夹,参数应该以'/'结尾。


1

path实例化为PureWindowsPath即可解决问题:

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

我不确定我是否做错了什么,但我尝试过了,它仍然解析为单个正斜杠。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接