Почему pathlib.Path("C:") разрешается в рабочий каталог в Windows?
Используя Python 3.6 в Windows 7 x64, путь "C:"
кажется идентичным пустому пути для Path.resolve()
:
"Пустые" пути - это "текущий рабочий каталог" cwd()
:
>>> from pathlib import Path
>>> Path().resolve()
WindowsPath('C:/Users/me')
>>> Path(r"").resolve()
WindowsPath('C:/Users/me')
>>> Path.cwd().resolve()
WindowsPath('C:/Users/me')
Одна буква интерпретируется как имя папки:
>>> Path(r"C").resolve()
WindowsPath('C:/Users/me/C')
Полная буква диска + двоеточие + обратный слеш указывает на корень диска, как и ожидалось:
>>>> Path(r"C:\").resolve()
WindowsPath('C:/')
Но забывать точки обратной косой черты обратно в текущий рабочий каталог?
>>>> Path(r"C:").resolve()
WindowsPath('C:/Users/me/C')
Я ожидаю, что он будет рассматривать двоеточие (без обратной косой черты) как обычный символ (это делает для Path("te:st")
) или либо игнорировать его ("C"
) или трактуйте путь как корень диска ("C:\"
). Но вместо этого он, кажется, полностью игнорирует C.
Для других букв дисков ("A:"
, "X:"
,...), resolve либо зависает на неопределенное время (не приятно!), либо просит меня вставить диск в дисковод (что указывает на то, что он также не полностью игнорирует букву диска).
0 ответов
Это не.
По крайней мере, не в том смысле, что pathlib.Path("C:")
разрешается в рабочий каталог в Windows:
C:\Users\bersbers>d:
D:\>python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pathlib import Path
>>> Path.cwd().resolve()
WindowsPath('D:/')
>>> Path(r"C:").resolve()
WindowsPath('C:/Users/bersbers')
>>>
Как вы видете, C:
разрешает последний активный каталог на диске C:, что полностью соответствует тому, как Windows используетC:
vs. C:\
:
D:\>dir C:\
Volume in drive C is Windows
Volume Serial Number is 1234-ABCD
Directory of C:\
01/17/2020 10:34 AM <DIR> Program Files
01/18/2020 12:11 AM <DIR> Program Files (x86)
...
Сравните это с этим:
D:\>dir C:
Volume in drive C is Windows
Volume Serial Number is 1234-ABCD
Directory of C:\Users\bersbers
01/20/2020 11:19 AM <DIR> .
01/20/2020 11:19 AM <DIR> ..
08/23/2018 10:45 AM <DIR> .cache
11/27/2019 11:26 PM 1,024 .rnd
...
Это также относится к путям к файлам:
D:\>copy C:\.rnd %TEMP%
The system cannot find the file specified.
D:\>copy C:.rnd %TEMP%
1 file(s) copied.
И аналогично:
C:\Users\bersbers>D:
D:\>cd C:
C:\Users\bersbers
D:\>C:
C:\Users\bersbers>
против
C:\Users\bersbers>D:
D:\>cd C:\
D:\>C:
C:\>
Таким образом, Path("C:").resolve()
ведет себя именно так, как и следовало ожидать, на основе давно устоявшегося поведения Windows.