[英]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的新手。
我已经为您的问题写了一个解决方案,如下所示:
- 列出所有要压缩的文件。
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)
- 查找可以将这些文件分组的组列表。
#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 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.