Python pathlib и пути с особенными символами и пробелами - PullRequest
1 голос
/ 30 апреля 2020

друзей. Я застрял с проблемой, и я ценю некоторую помощь. Я пишу Python программу, которая будет искать по всему дереву каталогов и перебирать файлы, чтобы найти те, к которым обращались в последний раз более, чем за определенное время, за go, как за два года, за go.

Я работаю с pathlib comcompli sh эта задача. Проблема в том, что у меня есть несколько путей, которые имеют специальные символы и пробелы, и это приводит меня к FileNotFoundError .

Вот пример:


# -*- coding: utf-8 -*-
from pathlib import Path

path = r"E:\MY DIR\#SOME_DIR\#SOME_SUBDIR\ANOTHER_SUBDIR\firstname.lastname\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!001\MicrosoftEdge\Cache\LJ53QTBW\FaktCyrWeb-Normal-0038c5aa5c3243bb2995139e9aeb9519f62f098d0e0f7fab6c8b655a292d857d[1].woff"


print(Path(path).stat().st_atime)

Как я уже сказал, приведенный выше код вызывает исключение FileNotFoundError .

Есть ли способ выполнить sh это? Чтобы Python получить доступ к этому пути?

1 Ответ

0 голосов
/ 01 мая 2020

Я думаю, что Windows не принимает путь с более чем 256 символами: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum -path-длина-ограничение

Попробуйте это:

#/usr/bin/python3
# -*- coding: utf-8 -*-
import os
from pathlib import Path

def longpath(path):
    regular = os.fspath(path.resolve())
    if not regular.startswith('\\\\?\\'):
        regular = '\\\\?\\' + regular
    return Path(regular)

path = Path(r"E:\MY             DIR\#SOME_DIR\#SOME_SUBDIR\ANOTHER_SUBDIR\firstname.lastname\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!001\MicrosoftEdge\Cache\LJ53QTBW\FaktCyrWeb-Normal-0038c5aa5c3243bb2995139e9aeb9519f62f098d0e0f7fab6c8b655a292d857d[1].woff")
path_long = longpath(path)
print(Path(path_long).stat().st_atime)
...