Я создам резервную копию каталога, расположенного на компьютере под управлением Windows 7 с Python. Мне нужно сжать его как можно больше. Я еще не решил, куда идти.Python преодолевает ограничение 255 пути + имя файла и архивирует каталог
Основная проблема заключается в том, что каталог содержит сотни файлов/каталогов внутри, как каскадный, поэтому я не вижу внутри после 255 символов пути + имя файла. Эта структура каталогов создается сторонним программным обеспечением.
Для быстрого тестирования я написал следующее для генерации папок (для имитации);
start = time.time()
end = time.time() - start
root_dir = 'C:\test'
os.chdir("C:\test")
iterate = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
while (end<1):
end = time.time() - start
os.system("mkdir " + str(iterate))
os.chdir(root_dir + "\\" + str(iterate))
root_dir = os.getcwd()
Результаты этого;
The filename or extension is too long.
Traceback (most recent call last):
File "folder_generate.py", line 21, in <module>
os.chdir(root_dir + "\\" + str(iterate))
WindowsError: [Error 2] The system cannot find the file specified: 'c:\\Python27
\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUV
WXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQR
STUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMN
OPQRSTUVWXYZ'
Как было указано в другом вопросе здесь, но не ответил ясно.
У меня есть быстрый тестовый код для прохождения содержимого каталогов;
fileList = []
fileSize = 0
folderCount = 0
rootdir = "c:\\test"
for root, subFolders, files in os.walk(rootdir):
folderCount += len(subFolders)
for file in files:
f = os.path.join(root,file)
fileSize = fileSize + os.path.getsize(f)
fileList.append(f)
print("Total Size is {0} bytes".format(fileSize))
print("Total Files ", len(fileList))
print("Total Folders", folderCount)
Результаты;
Total Size is 0 bytes
('Total Files ', 0)
('Total Folders', 9)
Независимо от того, сколько папок находится в тестовой папке. Забавно, что я могу легко просматривать и создавать новую папку после 9.folder через проводник.
Я не вхожу в wind0z, поэтому я был бы признателен, если бы опытные пользователи могли помочь мне преодолеть это.
Просто архивируйте очень длинный каталог.
Спасибо за внимание. Однако я не могу получить «\\? \» Работу в Python. Если существует файл длиной более 260, он должен быть unicode, тогда прямое чтение через unicode должно решить проблему? subst назначит неиспользованную букву диска в папку, которая превышает 260 пределов. Я не думаю, что это подходит для таких случаев, когда есть огромное количество каскадных папок/каталогов. Все еще ищет обходной путь Python. – y33t
У Havent была эта проблема раньше ... Было немного поиска в Google, и кажется, что это серьезная проблема для многих людей, которым пришлось иметь дело с этим ... Посмотрите на http://bugs.musicbrainz.org/ticket/ 5342 обсуждает это. Они даже публикуют несколько вариантов функции, чтобы сократить имя файла (def shorten_file_name) ... Они, похоже, заставляют его работать в конце. Если вам нужны ваши старые пути, я предлагаю вам запустить файловую систему и записать файл csv с записями ключевых значений, где вы сохраните все пути к вашим файлам дольше 240 символов ... Затем запустите скрипт shorten_file_names ... – reuf
Это звучит как много работы, индексируя всю файловую систему, а не сырое читать файлы ... Я не могу сократить или имена файлов ни имена папок. – y33t