@ftftftftftftff
frontend developer

Как обойти ошибку и-за длинного пути до файла?

у меня есть метод, который разархивирует файлы из одной директории в другую, длинна пути до файла и места сохранения может быть любой, метод является рекурсивным, чтобы так же разархивировать архивы внутри архива, код метода:
def archive_unpacking(archive_path,path_to_save):
    os.makedirs(path_to_save, exist_ok=True)
    patoolib.extract_archive(archive_path,outdir=path_to_save)
    for d_arch,dirs_arch,files_arch in os.walk(path_to_save):
        for file in files_arch:
            file=pathlib.Path(os.path.join(d_arch,file))
            if file.suffix in ['.zip','.rar']:
                archive_unpacking(file,os.path.join(str(file.parent),str(file.stem)))
    os.remove(archive_path)


Проблема заключается в том, что путь до файла имеет слишком большую длину и из-за этого выходит ошибка, как мне ее обойти?
  • Вопрос задан
  • 298 просмотров
Решения вопроса 2
botermain
@botermain
Для начала, я бы предложил обновить Python хотя - бы до версии 3.6, потому что начиная с этой версии манифесты спокойно позволяют использовать длинные пути без танцев с бубном

Однако, если же обновлять Python не вариант, то должно помочь обращение к файлам по UNC путям с помощью префикса \\?\ или же в случае обычной строки Python \\\\?\\:
import os

prefix = '\\\\?\\'
path = 'C:\Program Files (x86)'
print(os.listdir(prefix+path))

UNC не поддерживает релативные пути, значение path должно быть абсолютным
Ответ написан
Комментировать
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Как в Windows 10 отключить ограничение на длину пу...

Вырезки из статьи:
В новой сборке Windows 10 Insider Preview Build 14352 доступной участникам программы Windows Insider, появилась новая возможность отключить ограничение на максимальную длину пути.


После перезагрузки пользователи и программы смогут без ограничений работать с файлами, длина пути к которым превышает 260 символов. Теперь на файлы будет действовать только ограничение файловой системы NTFS – 32767 символов .
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы