我正在尝试为我的工作自动化一些文件收集和压缩。 我遇到了一些麻烦。 我试过使用zipfile和shutil。代码如下。 我在模块上也有同样的问题。 我提供了一个目录列表,每个目录最多有30mb的文件。 我想压缩每个目录及其所有文件,并将压缩后的文件保存在正在压缩的目录中
例如:
+
|____dir_a
| |__file_a
| |__file_b
| |__dir_a.zip
|
|____dir_b
|___file_ba
|___file_bb
|___file_bc
|___dir_b.zip
问题似乎是,当我在将所有主目录收集到一个列表中之后在for循环中执行建议的步骤时:[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文件,它会被卡住。。。在我杀死它之前,我看着它增长到6gb左右。 在这个有6gb zip文件的目录中,最大的文件大小只有230kb。 主要是文本文件。这里发生了什么事
您可以使用ZipFile(文档here)将数据流式传输到zip文件中,而不是使用
shutil.make_archive
。我用几个有.zip
个文件和.tar.gz
的目录试用了一下,效果很好在你的情况下可能是这样
让我知道这是否有效
相关问题 更多 >
编程相关推荐