ftp_clint1.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import datetime
  2. import os
  3. import tarfile
  4. import time
  5. import numpy as np
  6. from hard_disk_storage import HardDiskStorage
  7. hard_disk_db = HardDiskStorage()
  8. def un_tar(path, file_name_list, save_path):
  9. # untar zip file
  10. file_name = file_name_list[0]
  11. tar_name = str(file_name[:file_name.index("_")]) + '.tar.gz'
  12. with tarfile.open(os.path.join(save_path, tar_name), 'w:gz') as tf:
  13. for image_name in file_name_list:
  14. tf.add(os.path.join(path, image_name), arcname=image_name)
  15. return tar_name
  16. def find_image(image_path):
  17. image_key = None
  18. zip_list = []
  19. all_flie_name = os.listdir(image_path)
  20. for file_name in all_flie_name:
  21. if file_name.endswith('.jpeg'):
  22. file_name = file_name[:file_name.index("_")]
  23. zip_list.append(file_name)
  24. zip_list = list(set(zip_list))
  25. zip_list.sort()
  26. if len(zip_list) > 1:
  27. image_key = zip_list[0]
  28. return image_key
  29. def find_pack_image(image_path, start_swith):
  30. zip_list = []
  31. all_flie_name = os.listdir(image_path)
  32. for file_name in all_flie_name:
  33. if file_name.endswith('.jpeg') and file_name.startswith(start_swith):
  34. zip_list.append(file_name)
  35. zip_list.sort()
  36. return zip_list
  37. def onload_mask(mask_path, IMAGE_SHAPE):
  38. mask_dict = {}
  39. all_flie_name = os.listdir(mask_path)
  40. for file_name in all_flie_name:
  41. if file_name.endswith('.bin') and file_name.startswith('mask'):
  42. key = file_name[file_name.index("_") + 1:-4]
  43. path = mask_path + '/' + file_name
  44. mask = np.fromfile(path, dtype=np.bool_)
  45. mask.shape = IMAGE_SHAPE
  46. mask_dict[key] = mask
  47. return mask_dict
  48. def tar_check(path, name_list, tar_name):
  49. with tarfile.open(tar_name, 'r:gz') as tar:
  50. if len(name_list) > len(tar.getnames()):
  51. return False
  52. else:
  53. original_size = 0
  54. for image_name in name_list:
  55. original_size = original_size + os.path.getsize(path + str(image_name))
  56. size = 0
  57. for ti in tar:
  58. if ti.isreg():
  59. size = size + ti.size
  60. if original_size <= size:
  61. return True
  62. else:
  63. return False
  64. def delete_image_bmp(path, name_list):
  65. for image_name in name_list:
  66. dirPath = path + str(image_name)
  67. if (os.path.exists(dirPath)):
  68. os.remove(dirPath)
  69. else:
  70. print("要删除的文件不存在!")
  71. if __name__ == '__main__':
  72. path = '/data/img_data/'
  73. save_path = '/data/img_gz/'
  74. sql = "SELECT uuid,time_begin,cage_number from measurement_data ORDER BY id desc limit 1;"
  75. res = hard_disk_db.execute_sql(sql, None)
  76. if res:
  77. uuid, time_begin, cage_number = res[0]['uuid'], str(res[0]['time_begin'])[:10], str(res[0]['cage_number'])
  78. this_path = os.path.join(save_path, time_begin + '_' + cage_number)
  79. if not os.path.exists(this_path):
  80. os.makedirs(this_path)
  81. # 打包部分
  82. key = find_image(path) # 获取符合打包要求的文件名(时间戳)
  83. if key != None:
  84. name_list = find_pack_image(path, key) # 获取符合打包要求的文件名列表
  85. tar_name = un_tar(path, name_list, this_path) # 压缩,返回压缩包的名称
  86. result = tar_check(path, name_list, os.path.join(this_path, tar_name)) # 大小检查
  87. if result == True:
  88. # pass
  89. delete_image_bmp(path, name_list) # 删除原始数据
  90. # 将本次打包信息插入数据库
  91. sql = f"insert into package_data (uuid, package_name, datetime, gz_path) " \
  92. f"values (%s,%s,%s,%s)"
  93. val = (uuid, tar_name, str(datetime.datetime.now()), this_path)
  94. hard_disk_db.execute_sql(sql, val)
  95. print('finsh')
  96. else:
  97. print('非法key:', key)
  98. else:
  99. print('当前非测量中')