1 Вопрос: Доступ к сетевым файлам с помощью pathlib

вопрос создан в Wed, May 8, 2019 12:00 AM

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

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

    
2
  1. Работает ли PureWindowsPath в этом случае?
    2019-05-08 16: 35: 56Z
  2. Не похоже, что это так. Я думаю, что проблема заключается в том, что даже в документации говорится, что несколько слэшей превратятся в одно, независимо от того, что вы делаете. Если вы посмотрите документацию в одном из блоков этого кода это демонстрирует это. Видя, как объект PureWindowsPath наследует от PurePath, он, я думаю, будет иметь те же характеристики.
    2019-05-14 16: 44: 46Z
1 ответ                              1                         

Создание экземпляра path как PureWindowsPath должно помочь:

path = PureWindowsPath("//server-01", "directory", "file") # '\\\\server-01\\directory\\file'
    
0
2019-05-08 16: 57: 04Z
  1. Я не уверен, что делаю что-то не так, но я попытался это сделать, и он все еще разрешается с одной косой чертой.
    2019-05-13 20: 09: 20Z
источник размещен Вот