文档章节

python 监视文件目录

BryanYang
 BryanYang
发布于 2014/11/17 11:09
字数 452
阅读 4514
收藏 25

该例子为用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"


© 著作权归作者所有

共有 人打赏支持
BryanYang
粉丝 15
博文 165
码字总数 52036
作品 0
石景山
程序员
Gmond扩展Python模块

年初二开始翻译这篇文章的,过年嘛事情特别多,一下拜年一下来客人的,表弟啥的还要过来抢电脑玩~真心纠结。翻译这篇文章我发现我的英文水平真都很烂啊!!。。仅供参考,不负责任 Gmond扩展...

wilelm
2013/05/24
0
0
走进Python世界(二)搭建Python环境

Python 的环境配置 windows: windows 上搭建环境比较简单,直接下载安装包,直接安装即可, 安装完毕之后 E:PythonPython35Scripts;E:PythonPython35; 会被加入到 环境变量PATH 中。 Linux:...

Garrry
2015/07/16
0
0
报错EnvironmentError: mysql_config not found

MySQL for Python library在Python中也就相当于JAVA中对应MySQL的JDBC Driver 1. 首先安装mysql sudo apt-get install mysql-server 2. 安装mysql-python 下载MySQL-python-1.2.3.tar.gz(见......

jalyzjs
06/26
0
0
Python基础班每日整理(一)

01_Linux基础 1.操作系统的作用? 操作系统是配置在计算机硬件上的第一层软件,主要作用是管理好硬件设备。 2.Linux中根目录和家目录分别用什么表示? /表示根目录、~表示家目录 3.Linux中相...

我是小谷粒
06/28
0
0
linux-Centos7安装python3并与python2共存

1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查...

lemonwater
04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

此生1.3

颜值是开胃菜,不要太在意,正餐才是重点。

colinux
今天
1
0
[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
3
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
3
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
1
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部