python常用模块 os,datetime,time,MySQLdb,hashlib

python常用模块 os,datetime,time,MySQLdb,hashlib

python OS模块常用功能
20150424 Chenxin整理

在Python的标准库os模块中包含普遍的操作系统功能.

下面是os模块常用的方法

系统相关
1.os.sep 可以取代操作系统特定的路径分割符
2.os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,是'posix'
3.os.getenv() 用来读取环境变量
4.os.putenv() 用来设置环境变量
5.os.system() 运行shell命令
6.os.popen() 运行shell命令
7.os.linesep 字符串给出当前平台使用的行终止符.例如,Windows使用'/r/n',Linux使用'/n'而Mac使用'/r'.

目录文件相关
1.os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径
2.os.curdir 返回当前目录('.')
3.os.listdir() 返回指定目录下的所有文件和目录名
4.os.chdir(dirname) 改变工作目录到dirname
5.os.rmdir() 删除指定目录
6.os.mkdir() 创建
7.os.remove() 函数用来删除一个文件
8. os.path.split() 将路径切开为目录和文件>>> os.path.split('/home/aaaa/bbb')->('/home/aaaa', 'bbb')
9. os.path.splitext() 分离文件名与扩展名: os.path.splitext('a.txt') -> ('a', '.txt')
10.os.path.isfile() 判断指定对象是否为文件.是返回True,否则
11.os.path.isdir() 判断指定对象是否为目录.是True,否则False。
12.os.path.exists() 函数用来检验给出的路径是否真地存在
13.os.path.abspath(name) 获得绝对路径
14.os.path.normpath(path) 规范path字符串形式
15.os.path.getsize(name) 获得文件大小,如果name是目录返回4096
16.os.path.join(path,name) 连接目录与文件名或目录.
17.os.path.basename(path) 返回文件名或路径中的文件名.
18.os.path.dirname(path) 返回路径中的文件路径
19.os.path.getmtime(name) 获取文件的修改时间
20.os.path.getctime(name) 获取文件的创建时间

21.os.stat(path).st_mtime 获取文件的修改时间
22.os.stat(path).st_ctime 获取文件的创建时间

19.os.walk(path) 获取某个目录下的所有文件以及所有子目录下的目录及文件.递归形式.返回值是由很多元组组成的generator.

第一种方式:(generator的使用)

查找需要备份的库名

dirname = os.walk('/usr/local/mysql/data') #这里返回一个generator
list=[]
dirname_tuple = dirname.next()
for i in dirname_tuple[1]:
list.append(i)
print list
remove_list=['mysql','asset_manage_database','performance_schema','test']
for i in remove_list:
list.remove(i)

需要备份的库名放置于list列表里

print list

第二种方式:

查找需要备份的库名

dirname = os.walk('/usr/local/mysql/data') #这里返回一个generator
list=[]
for i in dirname:
list.append(i)
list=list[0][1]

print list

remove_list=['mysql','asset_manage_database','performance_schema','test']
for i in remove_list:
list.remove(i)

需要备份的库名放置于list列表里

print list

sys模块 python 获取自身文件名的方法 判断自身是否在运行
20150425 Chenxin

比如文件名为: any_sqldb_backup.py,在运行该脚本时,取自己的文件名
print file # -->./any_sqldb_backup.py
import sys
print sys.argv[0][sys.argv[0].rfind(os.sep)+1:] #-->any_sqldb_backup.py

例子:

检查自身上次运行该脚本是否结束,如果未备份完,则终止此次的备份

import sys
curr_process_name = sys.argv[0][sys.argv[0].rfind(os.sep)+1:]
curr_process_numb_str = os.popen("ps axf|grep '%s'|grep -v grep |wc -l" %(curr_process_name)).read() #字符串类型,是"1"字符
curr_process_numb = int(curr_process_numb_str) #数值类型"1"
if curr_process_numb != 1: #表示已经有自身多余的进程在运行中了
exit()

python datetime,time模块使用 日期时间模块用法
20150425 Chenxin
一.先看些用过的例子

取得当前时间: 2015-04-25 23:36:47.099010

curr_time=datetime.datetime.now()
print "curr_time:",curr_time

转换hold_time对应的,这里给的是hold_time=60分钟.也可以是days,weeks,seconds等: 1:00:00

time_duan=datetime.timedelta(minutes=hold_time)
print "time_duan:",time_duan

取得60分钟前日期: (2015-04-25 23:36:47.099010) - (1:00:00) = (2015-04-25 22:36:47.099010)

time_duan_ago=curr_time - time_duan
print "time_duan_ago:",time_duan_ago

将时间转成timestamps,为unix格式时间:1429972607.0

time_duan_ago_timestamps=time.mktime(time_duan_ago.timetuple())
print "time_duan_ago_timestamps:",time_duan_ago_timestamps

二.功能说明
python中关于时间和日期函数有time和datatime

1.获取当前时间的两种方法:
import datetime,time
now = time.strftime("%Y-%m-%d %H:%M:%S")
print now
now = datetime.datetime.now()
print now

2.获取上个月最后一天的日期(本月的第一天减去1天)
last = datetime.date(datetime.date.today().year,datetime.date.today().month,1)-datetime.timedelta(1)
print last

3.获取时间差(时间差单位为秒,常用于计算程序运行的时间)
starttime = datetime.datetime.now()

long running

endtime = datetime.datetime.now()
print (endtime - starttime).seconds

4.计算当前时间向后10个小时的时间
d1 = datetime.datetime.now()
d3 = d1 + datetime.timedelta(hours=10)
d3.ctime()
其本上常用的类有:datetime和timedelta两个。它们之间可以相互加减。每个类都有一些方法和属性可以查看具体的值,如 datetime可以查看:天数(day),小时数(hour),星期几(weekday())等;timedelta可以查看:天数(days),秒数 (seconds)等。

5.python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

三.time模块包含的函数
包含的函数:
time() -- 返回当前时间戳,浮点数形式。不接受参数
clock() -- 返回当前程序的cpu执行时间。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准,而不是程序开始时间为基准。不接受参数。
sleep() -- 延迟一个时间段,接受整型、浮点型。
gmtime() -- 将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
localtime() -- 将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
asctime() -- 将时间元组格式转换为字符串形式。接受一个时间元组,其默认值为localtime()返回值
ctime() -- 将时间戳转换为字符串。接受一个时间戳,其默认值为当前时间戳。等价于asctime(localtime(seconds))
mktime() -- 将本地时间元组转换为时间戳。接受一个时间元组,必选。
strftime() -- 将时间元组以指定的格式转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime()
strptime() -- 将指定格式的时间字符串解析为时间元组,strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选。
tzset() -- 改变本地时区。

四.datetime模块包含的相关类和函数

dir(datetime)
['MAXYEAR', 'MINYEAR', 'doc', 'name', 'package', 'date', 'datetime',
'datetime_CAPI', 'time', 'timedelta', 'tzinfo']

包含的数据:
MAXYEAR -- 能表示的最大年份
MINYEAR -- 能表示的最小年份
datetime_CAPI -- C语言api访问的对象,可以help(datetime.datetime_CAPI)

包含的对象:
date -- 日期对象
datetime -- 日期时间对象
time -- 时间对象
timedelta -- 日期时间间隔对象
tzinfo -- 时区信息对象

dir(datetime.date)
['add', 'class', 'delattr', 'doc', 'eq', 'format', '__ge
__', 'getattribute', 'gt', 'hash', 'init', 'le', 'lt', '
ne', 'new', 'radd', 'reduce', 'reduce_ex', 'repr', 'rs
ub
', 'setattr', 'sizeof', 'str', 'sub', 'subclasshook', 'c
time', 'day', 'fromordinal', 'fromtimestamp', 'isocalendar', 'isoformat', 'isowe
ekday', 'max', 'min', 'month', 'replace', 'resolution', 'strftime', 'timetuple',
'today', 'toordinal', 'weekday', 'year']

包含的数据:
day -- 日号数值
month -- 月份数值
year -- 年份数值
max = datetime.date(9999, 12, 31)-- 最大的年、月、日的数值
min = datetime.date(1, 1, 1) -- 最小的年、月、日的数值
resolution = datetime.timedelta(1) -- 时间间隔单位为1天

包含的函数:
date(year, month, day) -- 构造函数,接受年、月、日三个参数,返回一个date object
ctime() -- 返回字符串格式的时间表示格式。不接受参数
fromordinal() -- 接受一个整型的天数数值,返回一个天数所等价的年数、月数、日数的date对象。
fromtimestamp() -- 接收一个浮点型的时间戳,返回一个从1970年起+时间戳的值对应的年、月、日的date对象。
isocalendar() -- 返回一个ISO标准的日历形式的3元元组,分别代表ISO year, week number, and weekday,不接收参数
isoformat() -- 返回一个ISO格式的日期字符串。格式为YYYY-MM-DD,不接收参数
isoweekday() -- 返回一个ISO格式的周表示。Monday == 1 ... Sunday == 7,不接收参数
replace() -- 返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。
strftime() -- 返回一个格式化的字符串形式日期。接收一个format参数,如:'%Y-%d-%m'
timetuple() -- 返回一个time的时间格式对象。等价于time.localtime()
today() -- 返回当前date或datetime对象。等价于fromtimestamp(time.time())
toordinal() -- 返回公元公历开始到现在的天数。公元1年1月1日为1
weekday() -- 返回日期表示的周期。Monday == 0 ... Sunday == 6

dir(datetime.time)
['class', 'delattr', 'doc', 'eq', 'format', 'ge', 'get
attribute
', 'gt', 'hash', 'init', 'le', 'lt', 'ne', '_
new_', 'nonzero', 'reduce', 'reduce_ex', 'repr', 'setattr'
, 'sizeof', 'str', 'subclasshook', 'dst', 'hour', 'isoformat', 'max'
, 'microsecond', 'min', 'minute', 'replace', 'resolution', 'second', 'strftime',
'tzinfo', 'tzname', 'utcoffset']

包含的数据:
hour -- 小时表示数值
microsecond -- 微秒表示数值
minute -- 分钟表示数值
second -- 秒表示数值
tzinfo -- 时区表示数值
max = datetime.time(23, 59, 59, 999999) -- 最大的时间表示数值
min = datetime.time(0, 0) -- 最小的时间表示数值
resolution = datetime.timedelta(0, 0, 1) -- 时间间隔单位为分钟

包含的函数:
time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) -- 构造函数,返回一个time对象。所有参数均为可选
dst() -- 返回时区信息的描述。如果实例是没有tzinfo参数则返回空
isoformat() -- 返回ISO 8601格式字符串, HH:MM:SS[.mmmmmm][+HH:MM].
replace() -- 返回一个替换指定时间字段的新time对象。4个可选参数,分别为hour,minute,second,microsecond。注意替换是产生新对象,不影响原time对象。
strftime() -- 接收一个format参数,返回一个对应格式的字符串。如:'%H:%M:%S'
tzname() -- 返回时区的名称。如果实例是没有tzinfo参数则返回空
utcoffset() -- 返回self.tzinfo.utcoffset(self)

dir(datetime.datetime)
['add', 'class', 'delattr', 'doc', 'eq', 'format', '__ge
__', 'getattribute', 'gt', 'hash', 'init', 'le', 'lt', '
ne', 'new', 'radd', 'reduce', 'reduce_ex', 'repr', 'rs
ub
', 'setattr', 'sizeof', 'str', 'sub', 'subclasshook', 'a
stimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fromordinal', 'fromtimest
amp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'm
in', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 's
trptime', 'time', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname
', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']
继承自date的数据:
day
month
year

继承自date的函数:
fromordinal(...)
isocalendar(...)
isoweekday(...)
strftime(...)
today(...)
toordinal(...)
weekday(...)

包含的数据:
hour
microsecond
minute
second
tzinfo
max = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
min = datetime.datetime(1, 1, 1, 0, 0)
resolution = datetime.timedelta(0, 0, 1)

包含的函数:
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) -- 构造函数,返回一个datetime对象。year, month, day为必选参数
astimezone(...) -- 根据给定的timezone对象,返回转换为本地时区的timezone对象。
combine(...) -- 根据给定date, time对象合并后,返回一个对应值的datetime对象。
ctime(...) -- 返回ctime格式的字符串。
date(...) -- 返回具有相同year, month, day的date对象
dst(...) -- 返回self.tzinfo.dst(self).
fromtimestamp(...) -- 根据时间戳数值,返回一个datetime对象。
isoformat(...) -- 返回ISO 8601格式的字符串,如:YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM]
now(...) -- 根据给定的时区,返回当地的当前时间。
replace(...) -- 返回一个替换了指定日期时间字段的新datetime对象
strptime(...) -- 根据string, format2个参数,返回一个对应的datetime对象。
time(...) -- 返回一个带有相同time,但没有tzinfo的time对象。
timetuple(...) -- 返回一个时间元素, 等价于time.localtime().
timetz(...) -- 返回一个带有相同time和tzinfo的time对象。
tzname(...) -- 返回self.tzinfo.tzname(self).
utcfromtimestamp(...) -- 返回UTC时间戳的datetime对象,时间戳值为time.time()
utcnow(...) -- 返回UTC当前时间的datetime对象.
utcoffset(...) -- Return self.tzinfo.utcoffset(self).
utctimetuple(...) -- 返回UTC时间元组对象, 等价于time.localtime().

说明:
datetime.time对象调用了time模块的基础方法。并封装之。
datetime.date对象同样调用了time模块的基础方法,并封装之。
datetime.datetime对象继承了datetime.date类,并调用了time模块的方法。

dir(timedelta)
['abs', 'add', 'class', 'delattr', 'div', 'doc', 'eq
', 'floordiv', 'format', 'ge', 'getattribute', 'gt', '__hash
__', 'init', 'le', 'lt', 'mul', 'ne', 'neg', 'new',
'nonzero', 'pos', 'radd', 'rdiv', 'reduce', 'reduce_ex',
'repr', 'rfloordiv', 'rmul', 'rsub', 'setattr', 'sizeof
', 'str', 'sub', 'subclasshook', 'days', 'max', 'microseconds', 'min
', 'resolution', 'seconds', 'total_seconds']

包含的数据:
days -- 天数
microseconds -- 微秒数(>= 0 and less than 1 second).
seconds -- 秒数 (>= 0 and less than 1 day).

max = datetime.timedelta(999999999, 86399, 999999)
min = datetime.timedelta(-999999999)
resolution = datetime.timedelta(0, 0, 1)

包含的函数:
timedelta() -- 构造函数,接收3个参数,天、秒、微秒
total_seconds() -- 时间间隔的总秒数

三.详细例子:

备份文件在本地磁盘上保留时间,如果过期的则予以删除

class bakfile_hold:
global hold_time
hold_time = 60
def remove_file(self,dir):
#获取之前备份文件的名称列表
file_list = os.listdir(dir)

    #取得当前时间: 2015-04-25 23:36:47.099010
    curr_time=datetime.datetime.now()
    print "curr_time:",curr_time

    #转换hold_time对应的,这里给的是分钟.也可以是days,weeks,seconds等: 1:00:00
    time_duan=datetime.timedelta(minutes=hold_time)
    print "time_duan:",time_duan

    #取得3天前日期: (2015-04-25 23:36:47.099010) - (1:00:00) = (2015-04-25 22:36:47.099010)
    time_duan_ago=curr_time - time_duan
    print "time_duan_ago:",time_duan_ago

    #将时间转成timestamps,为unix格式时间:1429972607.0
    time_duan_ago_timestamps=time.mktime(time_duan_ago.timetuple())
    print "time_duan_ago_timestamps:",time_duan_ago_timestamps

    for i in file_list:
        #获取文件的modify时间,并转化成timestamp格式
        file_timestamp=os.path.getmtime(r'%s/%s' %(dir,i))
        #print file_timestamp
        #比较文件modify时间和3天前时间,取出小于等于3天前日期的文件
        if float(file_timestamp) <= float(time_duan_ago_timestamps):
            #print "del %s %s" %(dir,i)
            os.remove('%s/%s'%(dir,i))

if name == "main":
bakfile_hold().remove_file(db_backup_dir)

python 连接 mysql
2019/01/17
使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。
Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3。
PyMySQL为替代Python-MySQL而生,纯python打造,接口与Python-MySQL兼容,安装方便,支持Python3。
SQLAlchemy是一个ORM框架,它并不提供底层的数据库操作,而是要借助于MySQLdb、PyMySQL等第三方库来完成,目前SQLAlchemy在Web编程领域应用广泛。

python MySQLdb模块(只支持python2.X版本)
20150326 Chenxin
MySQLdb用户指南: http://mysql-python.sourceforge.net/MySQLdb.html
MySQLdb文档: http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html

python MD5加密
20150327 Chenxin
1.简介
Python加密模块有好几个,但无论是哪种加密方式都需要先导入相应的加密模块然后再使用模块对字符串加密。
先导入md5加密所需模块:
import hashlib
创建md5对象
m = hashlib.md5()
生成加密串,其中 password 是要加密的字符串:
m.update('password')
获取加密串
passwd = m.hexdigest()
输出
print passwd

2.示例
自定义函数的方式实现:
def md5(str):
import hashlib
import types
if type(str) is types.StringType:
m = hashlib.md5()
m.update(str)
return m.hexdigest()
else:
return ''

num=md5('chenxin')
if num == '230e5d625d22443c7dec53eea1e5932c':
print 'OK'
else:
print 'False'

简单C/S鉴权的实现:
Server:
...
while True:
c,addr=s.accept()
c.send('Thank you for connecting')
items=c.recv(1024)
items_dict=json.loads(items)
num_md5=items_dict.get('num_md5','None')
if num_md5 == '230e5d625d22443c7dec53eea1e5932c':
pass
else:
continue
wan_ip=items_dict.get('public_ip','None')
lan_ip=items_dict.get('local_ip','None')
...

Client:

生成密码匹配

def md5(str):
import hashlib
import types
if type(str) is types.StringType:
m = hashlib.md5()
m.update(str)
return m.hexdigest()
else:
return ''
num_md5=md5('chenxin')
...
if name == "main":
get_public_ip=get_public_ip().getip()
get_local_ip=get_local_ip('eth1')
#用字典的方式封装数据,并包装到JSON里
dict={'num_md5':num_md5,'public_ip':get_public_ip,'local_ip':get_local_ip}
dict_json=json.dumps(dict)
...

posted @ 2020-04-20 14:31  ChanixChen  阅读(192)  评论(0编辑  收藏  举报