Я пытаюсь автоматизировать сбор файлов и архивирование для моей работы. И у меня возникли некоторые проблемы. Я пытался использовать zipfile и shutil. Код ниже. У меня та же проблема с модулями. Я кормлю список каталогов, каждый из которых может содержать до 30 МБ файлов. Я хочу сжать каждый каталог со всеми его файлами и сохранить заархивированный файл в каталоге, который будет заархивирован.
Например:
+
|____dir_a
| |__file_a
| |__file_b
| |__dir_a.zip
|
|____dir_b
|___file_ba
|___file_bb
|___file_bc
|___dir_b.zip
проблема, кажется, заключается в том, что, когда я делаю рекомендуемые шаги в для l oop после сбора всех основных каталогов в список: [dir_a, dir_b]
Молния никогда не останавливается. Похоже, он пытается сжать каждый файл в один большой файл? или, может быть, просто разархивировать один и тот же каталог снова и снова? Я не уверен, что происходит. Но он будет продолжать работать, пока не поглотит все дисковое пространство.
вот, казалось бы, простой код, который я использую:
def main(directory):
if directory[-1] in ['/', '\\']:
directory = directory[:-1]
# Call the function to retrieve all files and folders of the assigned directory
filePaths = [f.path for f in os.scandir(directory) if f.is_file()]
# Set the zip file name
zipFileName = os.path.split(directory)[-1] + ".zip"
# printing the list of all files to be zipped
print('The following list of files will be zipped:')
for fileName in filePaths:
print(fileName)
# # writing files to a zipfile
# with zipfile.ZipFile(directory + '/' + zipFileName, 'w', zipfile.ZIP_DEFLATED) as zip_file:
# # writing each file one by one
# for file in filePaths:
# zip_file.write(file)
# print(directory+'.zip file is created successfully!')
shutil.make_archive(directory + '/' + zipFileName[:-4], 'zip', directory)
return directory + '/' + zipFileName
root = '/opt/folder_a/nested_folder/
for directory in [root + 'dir_a/', root + 'dir_b/']:
main(directory)
так что я обнаружил, что если существует более 5 каталогов, zip-файлы в основном маленькие. но потом будет случайный zip-файл, который застревает ... и я смотрел, как он вырос до 6 Гб, прежде чем я убил его. и в этом каталоге с zip-файлом 6 ГБ самый большой размер файла был всего 230 КБ. Был в основном текстовые файлы. что тут происходит?