需求描述:存在一个list,长度为n,我想隔一定数量(如长度k)进行压缩。 打包成一堆长度为k的包,最后一个包不足k,内容放完就行。
代码如下:
代码中我加了很多注释,应该很方便看啦!
# ! /usr/bin/env python
# -*- coding:utf-8
import os
import tarfile
from tkinter.messagebox import NO
def split_list_by_n(list_collection, n):
"""将集合均分, 每份n个元素
Args:
:param list_collection:
:param n:
:return: 返回的结果为评分后的每份可迭代对象
"""
for i in range(0, len(list_collection), n):
yield list_collection[i: i + n]
if __name__ == "__main__":
# 设置读取压缩文件的路径
compressed_path = 'test/' # 基于该脚本的相对路径,脚本与代压缩文件同一个目录,避免多级目录混乱
file_list = os.listdir(compressed_path)
# 设置压缩的数量
interval = 20
temp = split_list_by_n(file_list, interval)
# 设置保存信息
root_path = "/home/gongyan/tar_compress/test_tar/" # bag 包 保存位置
per_tar_name = "bag_"
k = 0
# 迭代
for item in temp:
# every item is a interval-length filelist
tar_name = "bag_" + "%03d"%k +'.tar'
f = None
with tarfile.open(os.path.join(root_path, tar_name),'w') as f:
for i in item:
f.add(compressed_path+i)
f.close()
k = k + 1
|