12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- #
- # Vendor: 9sdata.cn
- # Create At: 2019/1/3 0003
- #
- # 本程序为分光数据接入使用。用于把十所推送的数据(zip)分别 move 到当前整点小时的指定目录下,便于接入程序scan。
- # 因十所 ftp 推送只支持推送到 ftp 根目录下,因此可能会导致根目录下文件数量过多。导致程序在 listDir 时时间过长。
- # 因此开发本程序,分解压力。
- # 该程序可设置为 Linux 定时执行,每 5 分钟执行一次。该程序可能会导致需要升级Python
- #
- __author__ = "ZhenQin"
- import os, stat
- import os.path as path
- from datetime import datetime
- import shutil
- import logging
- BASE_DIR = path.abspath(__file__ + "/../") # 当前脚本文件目录,无需更改
- DATA_ROOT_PATH = "/Users/zhenqin/temp/ftp" # 十所推送数据目录,在FTP的根目录
- DATE_TARGET_PATH = "/Users/zhenqin/temp/tar_gz" # 需要 move 到的目录,在FTP根目录下 /fenguang/,会自动按照小时创建目录
- FILTER_FILE_SUBFIX = (".sql", ".txt") # 扫描的文件后缀,无需更改
- log = logging.getLogger(__name__)
- log.setLevel(logging.INFO)
- # 再创建一个handler,用于输出到控制台
- ch = logging.StreamHandler()
- # 定义handler的输出格式formatter
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- ch.setFormatter(formatter)
- # 给logger添加handler
- #logger.addFilter(filter)
- log.addHandler(ch)
- if not path.exists(path.abspath(DATE_TARGET_PATH)):
- # 如果目标目录不存在,则创建
- os.mkdir(path.abspath(DATE_TARGET_PATH)) # 创建目录
- os.chmod(path.abspath(DATE_TARGET_PATH), stat.S_IRWXU + stat.S_IRWXG + stat.S_IRWXO) # 授权目录权限为777
- log.info("mkdir: %s" % path.abspath(DATE_TARGET_PATH))
- def moveFile(file):
- currHour = datetime.now().strftime("%Y%m%d%H")
- target_dir = path.abspath(path.join(DATE_TARGET_PATH, currHour))
- if not path.exists(target_dir):
- # 如果目标目录不存在,则创建当前整点数据
- os.mkdir(target_dir) # 创建目录
- os.chmod(target_dir, stat.S_IRWXU + stat.S_IRWXG + stat.S_IRWXO) # 授权目录权限为777
- log.info("mkdir: %s" % target_dir)
- src_file = file
- log.info("move file %s to %s" % (src_file, target_dir))
- shutil.move(src_file, target_dir + "/" + path.basename(file))
- os.chmod(path.join(target_dir, path.basename(file)), stat.S_IRWXU+stat.S_IRWXG+stat.S_IRWXO) # move文件,把文件权限改为777
- def scanFile():
- """
- 扫描文件,把需要处理的后缀文件move到另一个目录下
- :return:
- """
- files = os.listdir(DATA_ROOT_PATH)
- for file in files:
- point_index = file.find(".")
- subfix = file[point_index:] if point_index > 0 else ""
- curr_file = path.abspath(path.join(DATA_ROOT_PATH, file))
- if path.isfile(curr_file) and FILTER_FILE_SUBFIX.count(subfix) > 0:
- # 处理的文件后缀名包含待处理的文件
- moveFile(curr_file)
- else:
- log.info("skip file: %s" % curr_file)
- if __name__ == "__main__":
- log.info("current dir: %s" % BASE_DIR)
- scanFile()
|