import datetime import os import tarfile import time import numpy as np from hard_disk_storage import HardDiskStorage hard_disk_db = HardDiskStorage() def un_tar(path, file_name_list, save_path): # untar zip file file_name = file_name_list[0] tar_name = str(file_name[:file_name.index("_")]) + '.tar.gz' with tarfile.open(os.path.join(save_path, tar_name), 'w:gz') as tf: for image_name in file_name_list: tf.add(os.path.join(path, image_name), arcname=image_name) return tar_name def find_image(image_path): image_key = None zip_list = [] all_flie_name = os.listdir(image_path) for file_name in all_flie_name: if file_name.endswith('.bin'): file_name = file_name[:file_name.index("_")] zip_list.append(file_name) zip_list = list(set(zip_list)) zip_list.sort() if len(zip_list) > 1: image_key = zip_list[0] return image_key def find_pack_image(image_path, start_swith): zip_list = [] all_flie_name = os.listdir(image_path) for file_name in all_flie_name: if file_name.endswith('.bin') and file_name.startswith(start_swith): zip_list.append(file_name) zip_list.sort() return zip_list def onload_mask(mask_path, IMAGE_SHAPE): mask_dict = {} all_flie_name = os.listdir(mask_path) for file_name in all_flie_name: if file_name.endswith('.bin') and file_name.startswith('mask'): key = file_name[file_name.index("_") + 1:-4] path = mask_path + '/' + file_name mask = np.fromfile(path, dtype=np.bool_) mask.shape = IMAGE_SHAPE mask_dict[key] = mask return mask_dict def tar_check(path, name_list, tar_name): with tarfile.open(tar_name, 'r:gz') as tar: if len(name_list) > len(tar.getnames()): return False else: original_size = 0 for image_name in name_list: original_size = original_size + os.path.getsize(path + str(image_name)) size = 0 for ti in tar: if ti.isreg(): size = size + ti.size if original_size <= size: return True else: return False def delete_image_bmp(path, name_list): for image_name in name_list: dirPath = path + str(image_name) if (os.path.exists(dirPath)): os.remove(dirPath) else: print("要删除的文件不存在!") if __name__ == '__main__': path = '/data/bin_data/' save_path = '/data/bin_gz/' sql = "SELECT uuid,time_begin,cage_number from measurement_data ORDER BY id desc limit 1;" res = hard_disk_db.execute_sql(sql, None) if res: uuid, time_begin, cage_number = res[0]['uuid'], str(res[0]['time_begin'])[:10], str(res[0]['cage_number']) this_path = os.path.join(save_path, time_begin + '_' + cage_number) if not os.path.exists(this_path): os.makedirs(this_path) # 打包部分 key = find_image(path) # 获取符合打包要求的文件名(时间戳) if key != None: name_list = find_pack_image(path, key) # 获取符合打包要求的文件名列表 tar_name = un_tar(path, name_list, this_path) # 压缩,返回压缩包的名称 result = tar_check(path, name_list, os.path.join(this_path, tar_name)) # 大小检查 if result == True: delete_image_bmp(path, name_list) print('finsh')