繁体   English   中英

使用python创建多个ZIP文件

[英]Create multiple ZIP files using python

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

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

我在网上看过,如果文件名以某些字符开头或结尾,则我阅读的每一页仅给出了如何压缩

这是我正在使用的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的新手。

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

  1. 列出所有要压缩的文件。
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. 查找可以将这些文件分组的组列表。
#list of groups        
for file in filelist:
    filegroup.add(file[folderstart:folderend])
    print(file)
  1. 为这些组创建文件夹。
#create folder for the group    
for group in filegroup:
    print(group)
    if not os.path.isdir(basedir+group) :
        os.mkdir(basedir+group)
  1. 将文件移动到相应的文件夹。
#move files to the folders
for file in filelist:
    os.rename(basedir+file,basedir+file[folderstart:folderend]+"/"+file)
  1. 压缩文件夹。
#compress the folders    
for group in filegroup:
    shutil.make_archive(basedir+group, 'zip', basedir+group)
    shutil.rmtree(basedir+group)

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

完整的解决方案。

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 
folderend = 9

#list of files to be compressed
for f in os.listdir(basedir):
    if f[-extensionlen:] == extension :
        filelist.append(f)

#list of groups        
for file in filelist:
    filegroup.add(file[folderstart:folderend])
    print(file)

#create folder for the group    
for group in filegroup:
    print(group)
    if not os.path.isdir(basedir+group) :
        os.mkdir(basedir+group)

#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----")

我已经测试了此解决方案,并且可以正常工作。 我在此代码中添加了更多功能供我使用。 此解决方案可用于压缩图像,文本文件等。

未经测试的次优解决方案,但应该足以助您一臂之力。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM