123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- 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('.jpeg'):
- 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('.jpeg') 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/img_data/'
- save_path = '/data/img_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:
- # pass
- delete_image_bmp(path, name_list) # 删除原始数据
- # 将本次打包信息插入数据库
- sql = f"insert into package_data (uuid, package_name, datetime, gz_path) " \
- f"values (%s,%s,%s,%s)"
- val = (uuid, tar_name, str(datetime.datetime.now()), this_path)
- hard_disk_db.execute_sql(sql, val)
- print('finsh')
- else:
- print('非法key:', key)
- else:
- print('当前非测量中')
|