fg_remove_file.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. #
  4. # Vendor: 9sdata.cn
  5. # Create At: 2019/1/3 0003
  6. #
  7. # 本程序为分光数据接入使用。用于把十所推送的数据(zip)分别 move 到当前整点小时的指定目录下,便于接入程序scan。
  8. # 因十所 ftp 推送只支持推送到 ftp 根目录下,因此可能会导致根目录下文件数量过多。导致程序在 listDir 时时间过长。
  9. # 因此开发本程序,分解压力。
  10. # 该程序可设置为 Linux 定时执行,每 5 分钟执行一次。该程序可能会导致需要升级Python
  11. #
  12. __author__ = "ZhenQin"
  13. import os, stat
  14. import os.path as path
  15. from datetime import datetime
  16. import shutil
  17. import logging
  18. BASE_DIR = path.abspath(__file__ + "/../") # 当前脚本文件目录,无需更改
  19. DATA_ROOT_PATH = "/Users/zhenqin/temp/ftp" # 十所推送数据目录,在FTP的根目录
  20. DATE_TARGET_PATH = "/Users/zhenqin/temp/tar_gz" # 需要 move 到的目录,在FTP根目录下 /fenguang/,会自动按照小时创建目录
  21. FILTER_FILE_SUBFIX = (".sql", ".txt") # 扫描的文件后缀,无需更改
  22. log = logging.getLogger(__name__)
  23. log.setLevel(logging.INFO)
  24. # 再创建一个handler,用于输出到控制台
  25. ch = logging.StreamHandler()
  26. # 定义handler的输出格式formatter
  27. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  28. ch.setFormatter(formatter)
  29. # 给logger添加handler
  30. #logger.addFilter(filter)
  31. log.addHandler(ch)
  32. if not path.exists(path.abspath(DATE_TARGET_PATH)):
  33. # 如果目标目录不存在,则创建
  34. os.mkdir(path.abspath(DATE_TARGET_PATH)) # 创建目录
  35. os.chmod(path.abspath(DATE_TARGET_PATH), stat.S_IRWXU + stat.S_IRWXG + stat.S_IRWXO) # 授权目录权限为777
  36. log.info("mkdir: %s" % path.abspath(DATE_TARGET_PATH))
  37. def moveFile(file):
  38. currHour = datetime.now().strftime("%Y%m%d%H")
  39. target_dir = path.abspath(path.join(DATE_TARGET_PATH, currHour))
  40. if not path.exists(target_dir):
  41. # 如果目标目录不存在,则创建当前整点数据
  42. os.mkdir(target_dir) # 创建目录
  43. os.chmod(target_dir, stat.S_IRWXU + stat.S_IRWXG + stat.S_IRWXO) # 授权目录权限为777
  44. log.info("mkdir: %s" % target_dir)
  45. src_file = file
  46. log.info("move file %s to %s" % (src_file, target_dir))
  47. shutil.move(src_file, target_dir + "/" + path.basename(file))
  48. os.chmod(path.join(target_dir, path.basename(file)), stat.S_IRWXU+stat.S_IRWXG+stat.S_IRWXO) # move文件,把文件权限改为777
  49. def scanFile():
  50. """
  51. 扫描文件,把需要处理的后缀文件move到另一个目录下
  52. :return:
  53. """
  54. files = os.listdir(DATA_ROOT_PATH)
  55. for file in files:
  56. point_index = file.find(".")
  57. subfix = file[point_index:] if point_index > 0 else ""
  58. curr_file = path.abspath(path.join(DATA_ROOT_PATH, file))
  59. if path.isfile(curr_file) and FILTER_FILE_SUBFIX.count(subfix) > 0:
  60. # 处理的文件后缀名包含待处理的文件
  61. moveFile(curr_file)
  62. else:
  63. log.info("skip file: %s" % curr_file)
  64. if __name__ == "__main__":
  65. log.info("current dir: %s" % BASE_DIR)
  66. scanFile()