使用python创建多个ZIP文件

时间:2018-01-18 10:56:28

标签: python

我正在尝试组织光栅文件。我有不同日期的不同图像(每个日期30多个图像),我想将它们压缩成每个日期的一个ZIP文件,而不必每次都用不同的名称重写代码。

例如,我希望它将所有以“L5_070704”开头的文件压缩成名为“L5_070704”的zip文件,将以“L5_070501”开头的文件压缩到另一个名为“L5_070501”的zip文件中,等等。

我在线查看,我读过的每一页只提供如何压缩,如果文件的名称以某些字符开头或以某些字符结尾

这是我正在使用的python代码,它适用于单个图像。

import os
import zipfile
L5_070704 = zipfile.ZipFile('F:\AOS_input\L5_070704.zip', 'w')
for folder, subfolders, files in os.walk('F:\AOS_input'):
    for file in files:
        if file.startswith('L5_070704'):
            L5_070704.write(os.path.join(folder, file), file, compress_type = zipfile.ZIP_DEFLATED)
L5_070704.close()

我是python的新手。

2 个答案:

答案 0 :(得分:2)

我已经为您的问题编写了一个解决方案,如下所示:

  
      
  1. 列出要压缩的所有文件。
  2.   
from ctypes import *

sharedlib = CDLL("sharedlib/resolve.so", mode = RTLD_GLOBAL)
sharedlib = CDLL("sharedlib/libadd.so", mode = RTLD_GLOBAL)
  
      
  1. 查找可以对这些文件进行分组的组列表。
  2.   
import os
import shutil

print("----PROCESS STARTED----")

filelist = [] #list of files to be compressed
filegroup = set() #set for grouping files
basedir = "C:/Users/XYZ/" #base directory
extension = "jpg" #extension of the file to be compressed
extensionlen = 3 #extension length of the file to be compressed
folderstart = 0 #starting index of the 
folderend = 9

#list of files to be compressed
for f in os.listdir(basedir):
    if f[-extensionlen:] == extension :
        filelist.append(f)
  
      
  1. 为这些组创建文件夹。
  2.   
#list of groups        
for file in filelist:
    filegroup.add(file[folderstart:folderend])
    print(file)
  
      
  1. 将文件移动到相应的文件夹。
  2.   
#create folder for the group    
for group in filegroup:
    print(group)
    if not os.path.isdir(basedir+group) :
        os.mkdir(basedir+group)
  
      
  1. 压缩文件夹。
  2.   
#move files to the folders
for file in filelist:
    os.rename(basedir+file,basedir+file[folderstart:folderend]+"/"+file)
  

完整的解决方案。

#compress the folders    
for group in filegroup:
    shutil.make_archive(basedir+group, 'zip', basedir+group)
    shutil.rmtree(basedir+group)

print("----PROCESS COMPLETED----")

我已经测试了这个解决方案,但它确实有效。我已经为此代码添加了一些功能供我使用。此解决方案可用于压缩图像,文本文件等。

答案 1 :(得分:0)

未经测试的次优解决方案,但应足以让您前进。

import os
import zipfile

# gather names of files to create, using existing filenames
zipfile_names = []
for folder, subfolders, files in os.walk('F:\AOS_input'):
    for f in files:
        zipfile_names.append(f)

zipfile_names = set(zipfile_names)  # make unique

for filename in zipfile_names:
    for folder, subfolders, files in os.walk('F:\AOS_input'):
        for f in files:
            if f.startswith(filename):        
                with zipfile.ZipFile(filename, 'w') as z:
                    z.write(os.path.join(folder, file), file, compress_type = zipfile.ZIP_DEFLATED)