Каждый каталог в файловой системе в стиле posix содержит два файла с самого начала: ..
, который ссылается на родительский каталог, и .
, который ссылается на текущий каталог:
$ mkdir tmp; cd tmp
tmp$ ls -a
. ..
tmp$ cd .
tmp$ # <-- still in the same directory
- с заметным исключением /..
, которое относится к самому корню, так как корень не имеет родителя.
Объект Path
из pathlib
Python - это, когда он создается, просто оболочка вокруг строки, которая, как предполагается, указывает где-то в файловой системе. Это будет относиться только к чему-то материальному, когда оно разрешено :
>>> Path('.')
PosixPath('.') # just a fancy string
>>> Path('.').resolve()
PosixPath('/current/working/dir') # an actual point in your filesystem
Суть в том, что
- пути
/current/working/dir
и /current/working/dir/.
, с точки зрения файловой системы, полностью эквивалентны, и
- a
pathlib.Path
также будет отражать это, как только будет решено.
Сопоставив вызов glob
с .
, вы нашли все ссылки, указывающие на текущие каталоги ниже исходного каталога. Результаты из glob
разрешаются по возвращении, поэтому .
там больше не появляется.
В качестве источника этого поведения см. этот раздел PEP428 (который служит в качестве спецификации для pathlib
), где кратко упоминается эквивалентность пути.