文档章节

python 监视文件目录

BryanYang
 BryanYang
发布于 2014/11/17 11:09
字数 452
阅读 4577
收藏 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+web3.py如何开发以太坊dapp?

Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py —— 对JSON RPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的...

geek12345
08/26
0
0
跨平台 Python IDE - NovalIDE

NovalIDE 是一款开源,跨平台,而且免费的国产 Python IDE ,有出色的语法高亮功能,支持多种语言,Python,C/C++,HTML,JavaScript,xml,CSS 等,解释器运行脚本,支持函数智能提示和代码...

东方玄
05/23
0
0
python+web3.py如何开发以太坊dapp?

Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py —— 对JSON RPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的...

geek12345
08/26
0
0
python用web3.py库开发以太坊dapp

以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用...

jimi2018
08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

腾讯投资最高1.75亿美元正式进军菲律宾移动支付市场

菲律宾长途电话公司(PLDT)公司今日宣布,中国互联网巨头腾讯和私募股权公司KKR将获得该公司旗下金融科技公司Voyager Innovations的少数股权。 PLDT在一份声明中称:“腾讯和KKR最多将分别收...

linuxCool
21分钟前
2
0
正则介绍及grep/egrep用法

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data 正则介绍 正则就是一串有规律的字符...

hhpuppy
32分钟前
1
0
J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接

一直以来 J2Cache 都是使用 Jedis 连接 Redis 服务的。Jedis 是一个很老牌的 Redis 的 Java 开发包,使用很稳定,作者维护很勤勉,社区上能搜到的文章也非常非常多。算是使用范围最广的 Redi...

红薯
今天
12
0
一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
今天
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部