Lework Study hard, improve every day.

Python 小手册 - 常用模块

2016-09-07
本文 9215 字,阅读全文约需 27 分钟

Python 小手册 - 常用模块

提示:本文档以python2.7版本为例

编码


bash64


>>> import base64
>>> dir(base64)
['EMPTYSTRING', 'MAXBINSIZE', 'MAXLINESIZE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_b32alphabet', '_b32rev', '_b32tab', '_translate', '_translation', '_x', 'b16decode', 'b16encode', 'b32decode', 'b32encode', 'b64decode', 'b64encode', 'binascii', 'decode', 'decodestring', 'encode', 'encodestring', 'k', 're', 'standard_b64decode', 'standard_b64encode', 'struct', 'test', 'test1', 'urlsafe_b64decode', 'urlsafe_b64encode', 'v']
>>> base64.b64encode('hello,base64')
'aGVsbG8sYmFzZTY0'

>>> base64.b64decode('aGVsbG8sYmFzZTY0')
'hello,base64'

>>> base64.urlsafe_b64decode('abcd--__')
'i\xb7\x1d\xfb\xef\xff'

>>> base64.b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd++//'

>>> base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd--__'

md5

>>> import md5
>>> hash = md5.new()
>>> hash.update('admin')
>>> print hash.hexdigest()
21232f297a57a5a743894a0e4a801fc3


... import hashlib
>>> hash = hashlib.md5()
>>> hash.update('admin')
>>> print hash.hexdigest()
21232f297a57a5a743894a0e4a801fc3

sha256

>>> from Crypto.Hash import SHA256
>>> hash = SHA256.new()
>>> hash.update('message')
>>> hash.digest()
'\xabS\n\x13\xe4Y\x14\x98+y\xf9\xb7\xe3\xfb\xa9\x94\xcf\xd1\xf3\xfb"\xf7\x1c\xea\x1a\xfb\xf0+F\x0cm\x1d'


序列化和json


>>> import pickle
>>> 
>>> d = {'a':1,'b':2}
>>> s = pickle.dumps(d)
>>> 
>>> pickle.dump(d,open('b.txt','w'))
>>> pickle.load(open('b.txt','r'))
{'a': 1, 'b': 2}


>>> import json
>>> 
>>> j = json.dumps(d)
>>> print j
{"a": 1, "b": 2}
>>> 
>>> json.dump(d,open('c.txt','w'))
>>> json.load(open('c.txt','r'))
{u'a': 1, u'b': 2}

os模块


相对sys模块 os模块更为底层 os._exit() try无法抓取

  • os.popen(‘id’).read() # 执行系统命令得到返回结果
  • os.system() # 得到返回状态 返回无法截取
  • os.name # 返回系统平台 Linux/Unix用户是’posix’
  • os.getenv() # 读取环境变量
  • os.putenv() # 设置环境变量
  • os.getcwd() # 当前工作路径
  • os.chdir() # 改变当前工作目录
  • os.environ[‘HOME’] # 查看系统环境变量
  • os.statvfs(“/”) # 获取磁盘信息

文件处理

  • os.mkfifo()/mknod() # 创建命名管道/创建文件系统节点
  • os.remove()/unlink() # 删除文件
  • os.rename()/renames() # 重命名文件
  • os.stat() # 返回文件信息
  • os.symlink() # 创建符号链接
  • os.utime() # 更新时间戳
  • os.tmpfile() # 创建并打开(‘w+b’)一个新的临时文件
  • os.walk(‘/root/’) # 遍历目录树下的所有文件名
  • oct(os.stat(‘th1.py’).st_mode)[-3:] # 查看文件权限

目录/文件夹

  • os.chdir()/fchdir() # 改变当前工作目录/通过一个文件描述符改变当前工作目录
  • os.chroot() # 改变当前进程的根目录
  • os.listdir() # 列出指定目录的文件
  • os.getcwd()/getcwdu() # 返回当前工作目录/功能相同,但返回一个unicode对象
  • os.mkdir()/makedirs() # 创建目录/创建多层目录
  • os.rmdir()/removedirs() # 删除目录/删除多层目录

访问/权限

  • os.saccess() # 检验权限模式
  • os.chmod(‘txt’,eval(“0777”)) # 改变权限模式
  • os.chown()/lchown() # 改变owner和groupID功能相同,但不会跟踪链接
  • os.umask() # 设置默认权限模式

文件描述符操作

  • os.open() # 底层的操作系统open(对于稳健,使用标准的内建open()函数)
  • os.read()/write() # 根据文件描述符读取/写入数据 按大小读取文件部分内容
  • os.dup()/dup2() # 复制文件描述符号/功能相同,但是复制到另一个文件描述符

设备号

  • os.makedev() # 从major和minor设备号创建一个原始设备号
  • os.major()/minor() # 从原始设备号获得major/minor设备号

os.path模块

  • os.path.expanduser(‘~/.ssh/key’) # 家目录下文件的全路径

分隔

  • os.path.basename() # 去掉目录路径,返回文件名
  • os.path.dirname() # 去掉文件名,返回目录路径
  • os.path.join() # 将分离的各部分组合成一个路径名
  • os.path.spllt() # 返回(dirname(),basename())元组
  • os.path.splitdrive() # 返回(drivename,pathname)元组
  • os.path.splitext() # 返回(filename,extension)元组

信息

  • os.path.getatime() # 返回最近访问时间
  • os.path.getctime() # 返回文件创建时间
  • os.path.getmtime() # 返回最近文件修改时间
  • os.path.getsize() # 返回文件大小(字节)

查询

  • os.path.exists() # 指定路径(文件或目录)是否存在
  • os.path.isabs() # 指定路径是否为绝对路径
  • os.path.isdir() # 指定路径是否存在且为一个目录
  • os.path.isfile() # 指定路径是否存在且为一个文件
  • os.path.islink() # 指定路径是否存在且为一个符号链接
  • os.path.ismount() # 指定路径是否存在且为一个挂载点
  • os.path.samefile() # 两个路径名是否指向同一个文件

子进程

  • os.fork() # 创建子进程,并复制父进程所有操作 通过判断pid = os.fork() 的pid值,分别执行父进程与子进程操作,0为子进程
  • os.wait() # 等待子进程结束

跨平台os模块属性

  • os.linesep # 用于在文件中分隔行的字符串
  • os.sep # 用来分隔文件路径名字的字符串
  • os.pathsep # 用于分割文件路径的字符串
  • os.curdir # 当前工作目录的字符串名称
  • os.pardir # 父目录字符串名称

磁盘空间

import os
disk = os.statvfs("/")
disk.f_bsize       # 块大小
disk.f_blocks      # 块总数
disk.f_bfree       # 剩余块总数
disk.f_bavail      # 非root用户的剩余块数  由于权限小会比root的剩余块总数小 用这个做报警会更准确
disk.f_files       # 总节点数
disk.f_ffree       # 剩余节点数
disk.f_favail      # 非root用户的剩余节点数

disk.f_bsize * disk.f_bavail / 1024 / 1024 / 1024   # 非root用户剩余空间大小G
disk.f_bsize * disk.f_blocks / 1024 / 1024 / 1024   # 分区空间总大小

去除文件中的换行符

import os
for i in file(r'c:\1.txt').readlines():
	a=i.strip(os.linesep)

列出当前目录下的所有目录

[x for x in os.listdir('.') if os.path.isdir(x)]

列出当前目录下的所有python文件

[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

sys


  • sys.argv # 取参数列表
  • sys.exit(2) # 退出脚本返回状态 会被try截取
  • sys.exc_info() # 获取当前正在处理的异常类
  • sys.version # 获取Python解释程序的版本信息
  • sys.maxint # 最大的Int值 9223372036854775807
  • sys.maxunicode # 最大的Unicode值
  • sys.modules # 返回系统导入的模块字段,key是模块名,value是模块
  • sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  • sys.platform # 返回操作系统平台名称
  • sys.stdout # 标准输出
  • sys.stdin # 标准输入
  • sys.stderr # 错误输出
  • sys.exec_prefix # 返回平台独立的python文件安装的位置
  • sys.stdin.readline() # 从标准输入读一行
  • sys.stdout.write(“a”) # 屏幕输出a
  • sys.path.insert(1, os.path.join(sys.path[0], ‘/opt/script/’)) # 将/opt/script/目录加入环境变量,可导入相应模块

time

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。 DST(Daylight Saving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时。

time有2种时间表示形式

  1. 时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。
  2. 元组格式表示法,即一种Python的数据结构表示。这个元组有9个整型内容。分别表示不同的时间含义。 year (four digits, e.g. 1998)
    month (1-12)
    day (1-31)
    hours (0-23)
    minutes (0-59)
    seconds (0-59)
    weekday (0-6, Monday is 0)
    Julian day (day in the year, 1-366)
    DST (Daylight Savings Time) flag (-1, 0 or 1) ## 夏令时格式,0:表示正常格式,1:表示为夏令时格式,-1:表示根据当前的日期时间格式来判定
  • time.timezone # 当地时间与标准UTC时间的误差,以秒计
  • time.altzone # 当地夏令时时间与标准UTC时间的误差,以秒计
  • time.daylight # 当地时间是否反映夏令时,默认为0
  • time.tzname # 关于(标准时区名称, 夏令时时区名称)的元组
  • time.time() # 返回当前时间戳,浮点数形式。不接受参数
  • time.clock() # 返回当前程序的cpu执行时间。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准,而不是程序开始时间为基准。不接受参数。
  • time.sleep() # 延迟一个时间段,接受整型、浮点型。
  • time.gmtime() # 将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
  • time.localtime() # 将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
  • time.asctime() # 将时间元组格式转换为字符串形式。接受一个时间元组,其默认值为localtime()返回值
  • time.ctime() # 将时间戳转换为字符串。接受一个时间戳,其默认值为当前时间戳。等价于asctime(localtime(seconds))
  • time.mktime() # 将本地时间元组转换为时间戳。接受一个时间元组,必选。
  • time.strftime() # 将时间元组以指定的格式转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime()
  • time.strptime() # 将指定格式的时间字符串解析为时间元组,strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选。
  • time.tzset() # 改变本地时区。

时间字符串支持的格式符号

格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
>>> import time
>>> time.time()
1469156306.797714
>>> time.mktime(time.localtime())
1469156317.0
>>> time.timezone
-28800
>>> time.altzone
-28800
>>> time.daylight
0
>>> time.tzname
('CST', 'CST')
>>> time.strptime('2014-11-11','%Y-%m-%d')
time.struct_time(tm_year=2014, tm_mon=11, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=315, tm_isdst=-1)
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=11, tm_min=7, tm_sec=37, tm_wday=4, tm_yday=204, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=3, tm_min=7, tm_sec=53, tm_wday=4, tm_yday=204, tm_isdst=0)
>>> time.strftime('%Y-%m-%d', time.localtime())
'2016-07-22'
>>> time.time()
1469157121.0396891

>>> time.ctime(time.time())
'Fri Jul 22 11:12:08 2016'

>>> time.strptime(time.ctime(time.time()))
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=11, tm_min=12, tm_sec=56, tm_wday=4, tm_yday=204, tm_isdst=-1)

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(time.ctime(time.time())))
'2016-07-22 11:15:09'

datetime


  • datetime.date:表示日期的类。常用的属性有year, month, day
  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
  • datetime.datetime:表示日期时间
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度
>>> import datetime
>>> dir(datetime)
['MAXYEAR', 'MINYEAR', '__doc__', '__file__', '__name__', '__package__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'tzinfo']
>>> datetime.MAXYEAR
9999
>>> datetime.MINYEAR
1

>>> print datetime.datetime.now() 
2016-07-22 11:19:57.080741
>>> print datetime.datetime.now()- datetime.timedelta(days=5)
2016-07-17 11:20:29.847780
>>> print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
2016-07-22 11:20:50

timestamp转换为datetime

>>> from datetime import datetime
>>> t = 1429417200.0
>>> print datetime.fromtimestamp(t)
2015-04-19 12:20:00

timestamp也可以直接被转换到UTC标准时区的时间:

>>> from datetime import datetime
>>> t = 1429417200.0
>>> print datetime.fromtimestamp(t)  # 本地时间
2015-04-19 12:20:00
>>> print datetime.utcfromtimestamp(t) # UTC时间
2015-04-19 04:20:00

str转换为datetime

>>> from datetime import datetime
>>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>> print cday 
2015-06-01 18:19:59

datetime转换为str

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now.strftime('%a, %b %d %H:%M') 
Mon, May 05 16:28

datetime加减

>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
原文地址 https://lework.github.io/2016/09/07/module/

Comments

Content