Доступ к сетевым файлам с помощью pathlib - PullRequest
3 голосов
/ 08 мая 2019

Я пытаюсь протестировать программу, используя модуль 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

Если кто-нибудь знает лучший способ сделать это, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 18 июля 2019

Если вы создаете свой путь как:

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

вместо запятой, разделяющей каждый каталог, он будет работать.

0 голосов
/ 08 мая 2019

Создание path как PureWindowsPath должно сделать трюк:

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