python 监视文件目录

该例子为用watchdog来监视新文件,当新文件来时候,调用相应的解析脚本,进行解析入库。

目录:

-scripts

--脚本1.py

--脚本2.py

-tmp

--已处理的文件1,

--已处理的文件2

config.py

watchdog.py

watchdog.py 文件,该业务只监听新文件创建的事件:

# coding=utf8
import sys
import time
import logging
import imp
import re
import scripts.CONFIG
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler

class CreatedEventHandler(FileSystemEventHandler):

    def __init__(self):
        FileSystemEventHandler.__init__(self)

    def on_created(handler,event):
        file_name = event.src_path[2:]
        print ‘--‘+file_name

        moduleName = ‘‘
        for key in parse_map.keys():
            if(re.match(key,file_name)):
                moduleName = parse_map[key]
                break
        if(moduleName != ‘‘):
            try:
                #动态加载相应的module
                parseModule =  imp.load_module(moduleName,*imp.find_module(moduleName,[‘./scripts/‘]))
                print ‘  load module: ‘ + moduleName
                parseModule.parse(file_name)
            except Exception,e:
                print e

#正则匹配,将文件match到相应的解析脚本上
parse_map={
            ‘^test.xlsx$‘:‘test‘,
            ‘^emt_finance.*\.xlsx‘:‘emt_finance‘
}

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO, format=‘%(asctime)s - %(message)s‘,datefmt=‘%Y-%m-%d %H:%M:%S‘)
    path = sys.argv[1] if len(sys.argv) > 1 else ‘.‘
    event_handler = CreatedEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    print ‘Watching...‘
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

解析脚本test.py

# FileName: test.py
# a simple test code 
import xlrd
import MySQLdb
import datetime
import os
import stat
import shutil

def parse(file):
    values = []
    if(file.split(‘.‘)[-1] != ‘xlsx‘):
        print ‘---skip‘ + file
        return
    try:
        data = xlrd.open_workbook(file)
        table = data.sheets()[0]
        for i in range(1,table.nrows):
            row = table.row_values(i)
            #excel date is the days from 1899/12/30
            row[0] = datetime.date(1899,12,30) + datetime.timedelta(row[0])
            values.append(row)
    except Exception,e:
        print e

    #print values
    try:
        conn = MySQLdb.connect(config.mysql_host,config.mysql_user,config.mysql_passwd,‘test‘,config.mysql_port)
        cur = conn.cursor()
        #values[0][5]=4
        for v in values:
            count = cur.execute(‘replace into testtable values(%s,%s,%s,%s,%s,%s)‘,v)

        conn.commit()
        print ‘  parse complete.‘
        ‘‘‘
        results=cur.fetchmany(5)
        for r in results:
            print r
        ‘‘‘
        cur.close()
        conn.close()

        #os.remove(‘tmp/test.pyc‘)
        
        if(os.path.exists(‘tmp/‘+file)):
            os.chmod(‘tmp/‘+file,stat.S_IWRITE)#去掉只读属性
            os.remove(‘tmp/‘+file) #删除它

        shutil.move(file,‘tmp/‘)
        print ‘  move filt to temp: ‘ + file
        print ‘  success!‘
            
    except MySQLdb.Error,e:
        print "Mysql Error %d: %s" % (e.args[0], e.args[1])

if __name__ == ‘__main__‘:
    exec "import CONFIG as config"
    print ‘==‘*10
    #os.remove(‘../tmp/test.xlsx‘)
    #shutil.move(‘../test.xlsx‘,‘tmp/‘)
    #parse(‘../test.xlsx‘)
else:
    exec "import scripts.CONFIG as config"
时间: 2024-10-17 22:24:31

python 监视文件目录的相关文章

python 监控文件目录变化

使用os.listdir()监控文件目录: #!/usr/bin/env python #-*- coding=utf-8 -*- #filename: monitor_dir.py import os import time monitor_dir = "/opt/" now_file = dict([(f,None)for  f in os.listdir(monitor_dir)]) while True:     new_file = dict([(f,None)for  f 

python根据文件目录、文件类型和文件与当前时间差删除文件

直接贴代码: #!/usr/bin/python # -*- coding: gbk -*- import os import datetime import re def deleteFile(base_dir,days,file_ype): now_time = datetime.datetime.now() #获取当前时间 os.chdir(base_dir) #切换到此目录 cwd = os.getcwd() #得到当前目录 files = os.listdir(os.getcwd())

python访问文件目录

1.方法简单介绍 os.walk 返回的是一个三元tupple(dirpath, dirnames, filenames), 其中第一个为起始路径, 第二个为起始路径下的文件夹, 第三个是起始路径下的文件.dirpath是一个string,代表目录的路径, dirnames是一个list,包含了dirpath下所有子目录的名字, filenames是一个list,包含了非目录文件的名字. 这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name)

Python读取文件目录并检索

import os import os.path f=open("Shouldlist.txt") ShouldList=[] while 1: line =f.readline().strip('\n') #  print line if not line: break ShouldList.append(line) # print ShouldList rootdir="Z:\GETOT_BW" ArriveFile='' for parent,dirnames

python之文件目录操作

代码示例: 1 # 改变当前目录操作 2 import os 3 4 cur = os.curdir 5 print("1.当前目录相对路径:", cur) 6 par = os.pardir 7 print("2.父目录相对路径:", par) 8 cwd = os.getcwd() 9 print("3.当前目录绝对路径:", cwd) 10 os.chdir(os.pardir) # 改变当前路径 11 cwd = os.getcwd()

python监视mysql最大连接数

#!/usr/local/bin/python3.5import pymysqlimport time sum = 0 while True:#open db connection db = pymysql.connect('localhost','root','abc-123','test') #use cursor() cursor = db.cursor() #use execute() run sql cursor.execute("show variables like '%max_c

Python小程序代码片

用于记录自己写的,或学习期间看到的不错的,小程序,持续更新...... **************************************************************** [例001]计算:1-2+3-4..+199-200值 #encoding=utf-8 #计算 1-2+3-4..+199-200值 #1+3+5+7+...199 #-2-4-6...-200 sum1 = 0 sum2 = 0 for i in range(1,200,2): #计算1+3+5

kali linux Python 黑客编程1 开发环境初始化

kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Python提供了丰富的库供调用,丰富的第三方扩展模块.在网络应用,文本解析方面,Python编程有着其他语言无可比拟的优势.同时Python也是面向对象并且跨平台的语言,可以在linux/Unix.OSX.windows上无障碍运行. 1.1 查看PYTHON版本信息 Kali Linux默认已经安装了P

python如何调用c编译好可执行程序

    以下总结出几种在Python 中调用 C/C++ 代码的方法 -------------------------------------------------------------------- 发现做便捷的是使用popen from os import popen popen('/home/pengyan/Downloads/VIC/sanxia/vicNl -g /home/pengyan/Downloads/VIC/sanxia/xings_global') popen('/h