我有一个名为
ds237
的顶层目录,其下有多个子目录如下所示:ds237/
├── dataset_description.json
├── derivatives
├── sub-01
├── sub-02
├── sub-03
├── sub-04
├── sub-05
├── sub-06
├── sub-07
├── sub-08
├── sub-09
├── sub-10
├── sub-11
├── sub-12
├── sub-13
├── sub-21
├── sub-22
├── sub-23
├── sub-24
├── sub-25
├── sub-26
├── sub-27
├── sub-28
├── sub-29
我尝试根据 zip 文件的大小从 ds237 中创建多个带有适当 zip 名称的 zip 文件。
sub01-01.zip: 包含 sub-01 到 sub-07
sub08-13.zip : 包含 sub08 到 sub-13
我编写了一个逻辑,该逻辑创建子目录列表 [sub-01,sub-02,sub-03,sub-04,sub-05]
。 我创建了这个列表以便列表中所有子目录的总大小不应超过 5GB。
我的问题:如何编写函数将这些子目录(在列表中)压缩到具有适当名称的目标 zip 文件中。 基本上,我想编写以下函数:
def zipit([子目录列表], '路径/到/zipfile/sub*-*.zip'):
在 Linux 中,我通常通过以下方式实现此目标:
'zip -r compress/sub01-08.zip ds237/sub-0[1-8]'
/Users/aba/ds100/sub-0[1-6]
压缩成sub01-06.zip
,那么当我解压缩该zip文件时,它应该生成以下路径ds100/sub-01
和其他目录。 - learnningprogrammingrelpath
,使其从path
向上移动两个目录。因此,将os.path.join(path, '..')
更改为os.path.join(path, '..', '..')
,它应该可以工作。 - Jerrsub01-06.zip
和sub07-09.zip
时,理想情况下应该解压缩到ds100/sub-01 ds100/sub-02 ds100/sub-03 ds100/sub-04 ds100/sub-05 ds100/sub-06 ds100/sub-07 ds100/sub-08 ds100/sub-09
,然而,根据您建议的更改,上述脚本创建了两个不同的ds100
。 - learnningprogrammingds100
目录。可能是您的解压工具有一些配置问题。您还可以使用unzip zip_file.zip -d output_directory
将文件zip_file.zip
解压缩到output_directory
。这也是将代码更改为放置ds100
的替代方法,您只需将输出目录指定为ds100
即可。 - Jerr