Почему pathlib is_dir возвращает True в несуществующем каталоге? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть функция в одном из моих Python скриптов, которая должна находить определенный каталог в системе на разных машинах. Это работало хорошо, когда я использовал os.path, но недавно я решил обновить свой код до pathlib, и теперь у меня возникают проблемы.

from collections import defaultdict
import getpass
from pathlib import Path
import platform
import socket


# Returns the location of the ASDF directory
# It checks the following locations on UNIX/Windows systems by default:
UNIX = defaultdict(lambda: ('/hdd', f'/media/{getpass.getuser()}/My ExtHDD Name'))
WINDOWS = defaultdict(lambda: ('C:', 'D:', 'E:', 'F:', 'G:', 'H:'))
# Both are dictionaries of lists: keys are the specific computer names and the lists are the (ordered) locations to check for ASDF directory
# So you can define your own as e.g. WINDOWS['Funny-Computer-Name'] = 'F:', 'G:', 'D:', 'E:'

def get_asdf_dir():
    pc_name = socket.gethostname()
    for disk in (WINDOWS[pc_name] if platform.system().lower() == 'windows' else UNIX[pc_name]):
        asdf = Path(disk)/'ASDF'
        if asdf.is_dir():
            return asdf


print(get_asdf_dir())  # Prints C:ASDF
print(get_asdf_dir().is_dir())  # Prints True

Результаты печати при работе на Windows машина с каталогом ASDF, расположенным на моем H: диске.

  1. Почему Path(disk)/'ASDF' определяет путь C:ASDF, а не C:\ASDF? Это работало правильно, когда я использовал os.path.join(disk, 'ASDF').
  2. Почему тогда утверждается, что каталог C:ASDF существует? На моем диске C: нет каталога с именем ASDF, а в моем текущем рабочем каталоге нет каталога с именем C:ASDF.
...