使用 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()
.
经过多次尝试,我认为您可以通过以下方式通过 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应该以'/'结尾。
我正在尝试使用 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()
.
经过多次尝试,我认为您可以通过以下方式通过 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应该以'/'结尾。