Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407587
  • 博文数量: 119
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1061
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-14 12:48
个人简介

醉心于技术。

文章分类

全部博文(119)

文章存档

2018年(34)

2016年(1)

2015年(4)

2014年(6)

2013年(74)

我的朋友

分类: Python/Ruby

2013-09-01 11:57:14

公司有一个perl脚本,通过mid获取数据库中相应的timestamp,然后在把timestamp分成年,月,日,在组成路径,获取 mid相应的email文件。由于我要开发的另一款python程序需要用到这个程序,但又不想像命令一样执行这个perl程序,所以改写成了python的类。在脚本中直接调用即可。或者在网页上操作。

这里主要用到了两个主要的技术:
1. MySQLdb模块
2. datetime模块
这两个模块在这个脚本里有一写需要注意的问题。现在写下来:
1. 如果mid在数据库中找不到,那么会返回什么值?
2. datetime有许多的类和方法,如何归类他们?

  1. #!/usr/bin/env python
  2. import os
  3. import sys
  4. import datetime
  5. from getopt import getopt as argvs
  6. import MySQLdb

  7. class MSG(object):
  8.     def _querydb(self, table, mids):
  9.         query="SELECT message_id, add_timestamp FROM messages_%s WHERE message_id IN (%s)" % (table, ",".join(mids))
  10.         db=MySQLdb.connect(host='xxxxxx-xxxxxx.xxxxx.xxxxxxx.com',\
  11.         user='reader', passwd='xxxxx!t', db='xxxxxx')
  12.         cursor=db.cursor()
  13.         cursor.execute(query)
  14.         results=list(cursor.fetchall())
  15.         return results
  16.     
  17.     def getPath(self, mids):
  18.         results=[]
  19.         midspath=[]
  20.         results.extend(self._querydb('ham', mids))
  21.         results.extend(self._querydb('spam', mids))
  22.         results.extend(self._querydb('unknown', mids))
  23.         # modify 'add_timestamp' and input into another list
  24.         for result in results:
  25.         # transfer timestamp to date
  26.             add_time=datetime.datetime.utcfromtimestamp(result[1])
  27.             midpath="/xxx/xxxxx/xxxxxx/xxxxxxxx/%04d/%02d/%02d/%02d/%s.abc" % (add_time.year, add_time.month, add_time.day,
  28.             add_time.hour, result[0])
  29.             midspath.append((result[0], midpath))
  30.         return midspath

  31.     def _usage():
  32.         print "mid2path.py -h mids..."
  33.         sys.exit()

  34. if __name__=='__main__':
  35.     opts, args = argvs(sys.argv[1:], "h")
  36.     for m, n in opts:
  37.         if m=='-h':
  38.             _usage()
  39.     if not args:
  40.         _usage()

  41.     msg=MSG()
  42.     midspath=msg.getPath(args)
  43.     for mid, loc in midspath:
  44.         print mid,":",loc

阅读(7628) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~