Порядковый ли метод pathlib `glob` согласован между запусками? - PullRequest
4 голосов
/ 02 апреля 2020

Будет ли Path('.').glob('*.ext') приводить к последовательному упорядочению результатов (при условии, что файлы с глобусом не меняются)?

Кажется, что упорядочение глобуса основано на порядке файловой системы (при по крайней мере, для старой glob упаковки). Будет ли изменен порядок pathlib glob путем добавления файлов в каталог (который не будет включен в глобус)? Будет ли этот порядок изменяться файловой системой, даже если в каталог c ничего не будет добавлено (например, когда другие большие изменения файла будут сделаны в другом месте системы)? В течение нескольких дней? Или порядок останется неизменным во всех этих случаях?

Просто чтобы уточнить, я не могу просто преобразовать в список и отсортировать, так как слишком много путей к файлам, чтобы поместиться в память одновременно. Я надеюсь достичь того же порядка каждый раз, когда буду проходить обучение по ML, и хочу выделить каждый n-й файл в качестве проверочных данных. Это обучение займет несколько дней, поэтому мне интересно знать, останется ли порядок в файловой системе стабильным в течение длительного времени.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Проверка исходного кода для модуля pathlib, случайно, последний коммит указывает нам непосредственно на соответствующее место:

Использование os.scandir() в качестве диспетчера контекста в Path.glob().

Так что под капотом Path.glob использует os.scandir для получения записей каталога. Документы этой функции сообщают, что результаты неупорядочены:

Возвращает итератор os.DirEntry объектов, соответствующих записям в каталоге, заданном путем. Записи приводятся в произвольном порядке , а специальные записи '.' и '..' не включены.

(выделено мое)

0 голосов
/ 02 апреля 2020

Из опыта произвольного порядка glob / порядок файловой системы не меняется со временем, если вы не измените файлы вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...