文档章节

python 监视文件目录

BryanYang
 BryanYang
发布于 2014/11/17 11:09
字数 452
阅读 4426
收藏 25
点赞 0
评论 0

该例子为用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
博文 97
码字总数 52036
作品 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 ⋅ 05/12 ⋅ 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. Python3源码—编译

0.1. 整体架构 在最高的层次上,Python的整体架构可以分为三个主要的部分: 左:Python提供的大量的模块、库以及用户自定义的模块; 右:Python的运行时环境,包括对象/类型系统(Object/Ty...

whj0709 ⋅ 06/06 ⋅ 0

python2和python3同安装在Windows上,切换问题

python2使用:py -2 name.py(name是自定义名字) python3使用:py -3 name.py 使用python 自带的 2to3工具进行python2到python3的代码转换: 1.进入当前python2文件目录,把2to3工具复制到当...

白又白呀 ⋅ 05/22 ⋅ 0

Centos7安装Python3并兼容Python2的方法

Centos7安装Python3的方法 由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。 [root@VM_105_217_centos Python-3.6.2]# pythonPython 2....

宿小帅 ⋅ 06/01 ⋅ 0

Python SimpleHTTPServer

  搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享。但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方。比如你想快速共享Linux系统的某个目录...

郭恩洲_OSC博客 ⋅ 05/09 ⋅ 0

Centos7安装Python3

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

xinrenbaodao ⋅ 04/19 ⋅ 0

对指定多个目录的第一级保留进行保留(再递归删除空目录)

对指定多个目录的第一级保留进行保留(再递归删除空目录): 注: 1、先从1个文件里读取多个大目录 2、再将大目录里的第一级目录抓取后存到另1文件 3、再对第一级目录的子目录判断是否为空 ...

yangzhimingg ⋅ 06/13 ⋅ 0

Linux环境下的Anaconda安装及使用

Anaconda对于python就相当于Ubuntu对于Linux,即Anaconda是python的一个发行版,将python和许多常用的package打包,方便pythoners直接使用。像virtualenv、pyenv等工具管理虚拟环境,起到的作...

戴千岩 ⋅ 2017/09/24 ⋅ 0

跨平台 Python IDE - NovalIDE

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

东方玄 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 8分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 13分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 15分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 34分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 40分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 41分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 44分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 45分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 51分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 53分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部