У меня есть функция в одном из моих 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:
диске.
- Почему
Path(disk)/'ASDF'
определяет путь C:ASDF
, а не C:\ASDF
? Это работало правильно, когда я использовал os.path.join(disk, 'ASDF')
. - Почему тогда утверждается, что каталог
C:ASDF
существует? На моем диске C:
нет каталога с именем ASDF
, а в моем текущем рабочем каталоге нет каталога с именем C:ASDF
.