本章涉及标准库:
1、sys
2、os
3、glob
4、math
5、random
6、platform
7、pikle与cPikle
8、subprocess
9、Queue
10、StringIO
11、logging
12、ConfigParser
13、urllib与urllib2
14、json
15、time
系统 | 平台标识符 |
Linux | linux |
Windows | win32 |
Windows/Cygwin | cygwin |
Mac OS X |
darwin
|
方法 | 描述 | 示例 |
os.name | 返回操作系统类型 | 返回值是"posix"代表linux,"nt"代表windows |
os.extsep | 返回一个"."标识符 | |
os.environ | 以字典形式返回系统变量 | |
os.devnull | 返回/dev/null标识符 | |
os.linesep | 返回一个换行符"\n" | >>> print "a" + os.linesep + "b" a b |
os.sep | 返回一个路径分隔符正斜杠"/" | >>> "a" + os.sep + "b" 'a/b' |
os.listdir(path) | 列表形式列出目录 | |
os.getcwd() | 获取当前路径 | >>> os.getcwd() '/home/user' |
os.chdir(path) | 改变当前工作目录到指定目录 | >>> os.chdir('/opt') >>> os.getcwd() '/opt' |
os.mkdir(path [, mode=0777]) | 创建目录 | >>> os.mkdir('/home/user/test') |
os.makedirs(path [, mode=0777]) | 递归创建目录 | >>> os.makedirs('/home/user/abc/abc') |
os.rmdir(path) | 移除空目录 | >>> os.makedirs('/home/user/abc/abc') |
os.remove(path) | 移除文件 | |
os.rename(old, new) | 重命名文件或目录 | |
os.stat(path) | 获取文件或目录属性 | |
os.chown(path, uid, gid) | 改变文件或目录所有者 | |
os.chmod(path, mode) | 改变文件访问权限 | >>> os.chmod('/home/user/c/a.tar.gz', 0777) |
os.symlink(src, dst) | 创建软链接 | |
os.unlink(path) | 移除软链接 | >>> os.unlink('/home/user/ddd') |
urandom(n) | 返回随机字节,适合加密使用 | >>> os.urandom(2) '%\xec' |
os.getuid() | 返回当前进程UID | |
os.getlogin() | 返回登录用户名 | |
os.getpid() | 返回当前进程ID | |
os.kill(pid, sig) | 发送一个信号给进程 | |
os.walk(path) | 目录树生成器,返回格式:(dirpath, [dirnames], [filenames]) | >>> for root, dir, file in os.walk('/home/user/abc'): ... print root ... print dir ... print file |
os.statvfs(path) | ||
os.system(command) | 执行shell命令,不能存储结果 | |
popen(command [, mode='r' [, bufsize]]) | 打开管道来自shell命令,并返回一个文件对象 | >>> result = os.popen('ls')
>>> result.read()
|
os.path.basename(path) | 返回最后一个文件或目录名 | >>> os.path.basename('/home/user/a.sh') 'a.sh' |
os.path.dirname(path) | 返回最后一个文件前面目录 | >>> os.path.dirname('/home/user/a.sh') '/home/user' |
os.path.abspath(path) | 返回一个绝对路径 | >>> os.path.abspath('a.sh') '/home/user/a.sh' |
os.path.exists(path) | 判断路径是否存在,返回布尔值 | >>> os.path.exists('/home/user/abc') True |
os.path.isdir(path) | 判断是否是目录 | |
os.path.isfile(path) | 判断是否是文件 | |
os.path.islink(path) | 判断是否是链接 | |
os.path.ismount(path) | 判断是否挂载 | |
os.path.getatime(filename) | 返回文件访问时间戳 | >>> os.path.getctime('a.sh') 1475240301.9892483 |
os.path.getctime(filename) | 返回文件变化时间戳 | |
os.path.getmtime(filename) | 返回文件修改时间戳 | |
os.path.getsize(filename) | 返回文件大小,单位字节 | |
os.path.join(a, *p) | 加入两个或两个以上路径,以正斜杠"/"分隔。常用于拼接路径 | >>> os.path.join('/home/user','test.py','a.py') '/home/user/test.py/a.py' |
os.path.split( | 分隔路径名 | >>> os.path.split('/home/user/test.py') ('/home/user', 'test.py') |
os.path.splitext( | 分隔扩展名 | >>> os.path.splitext('/home/user/test.py')
('/home/user/test', '.py')
|
方法 | 描述 | 示例 |
math.pi | 返回圆周率 | >>> math.pi 3.141592653589793 |
math.ceil(x) | 返回x浮动的上限 | >>> math.ceil(5.2) 6.0 |
math.floor(x) | 返回x浮动的下限 | >>> math.floor(5.2) 5.0 |
math.trunc(x) | 将数字截尾取整 | >>> math.trunc(5.2) 5 |
math.fabs(x) | 返回x的绝对值 | >>> math.fabs(-5.2) 5.2 |
math.fmod(x,y) | 返回x%y(取余) | >>> math.fmod(5,2) 1.0 |
math.modf(x) | 返回x小数和整数 | >>> math.modf(5.2) (0.20000000000000018, 5.0) |
math.factorial(x) | 返回x的阶乘 | >>> math.factorial(5) 120 |
math.pow(x,y) | 返回x的y次方 | >>> math.pow(2,3) 8.0 |
math.sprt(x) | 返回x的平方根 | >>> math.sqrt(5)
2.2360679774997898
|
方法 | 描述 | 示例 |
random.randint(a,b) | 返回整数a和b范围内数字 | >>> random.randint(1,10) 6 |
random.random() | 返回随机数,它在0和1范围内 | >>> random.random() 0.7373251914304791 |
random.randrange(start, stop[, step]) | 返回整数范围的随机数,并可以设置只返回跳数 | >>> random.randrange(1,10,2) 5 |
random.sample(array, x) | 从数组中返回随机x个元素 | >>> random.sample([1,2,3,4,5],2) [2, 4] |
方法 | 描述 | 示例 |
platform.platform() | 返回操作系统平台 | >>> platform.platform() 'Linux-3.13.0-32-generic-x86_64-with-Ubuntu-14.04-trusty' |
platform.uname() | 返回操作系统信息 | >>> platform.uname() ('Linux', 'ubuntu', '3.13.0-32-generic', '#57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014', 'x86_64', 'x86_64') |
platform.system() | 返回操作系统平台 | >>> platform.system() 'Linux' |
platform.version() | 返回操作系统版本 | >>> platform.version() '#57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014' |
platform.machine() | 返回计算机类型 | >>> platform.machine() 'x86_64' |
platform.processor() | 返回计算机处理器类型 | >>> platform.processor() 'x86_64' |
platform.node() | 返回计算机网络名 | >>> platform.node() 'ubuntu' |
platform.python_version() | 返回Python版本号 | >>> platform.python_version()
'2.7.6'
|
参数
|
描述
|
args
|
命令,字符串或列表
|
bufsize
|
0代表无缓冲,1代表行缓冲,其他正值代表缓冲区大小,负值采用默认系统缓冲(一般是全缓冲)
|
executable
|
|
stdin
stdout
stderr
|
默认没有任何重定向,可以指定重定向到管道(PIPE)、文件对象、文件描述符(整数),stderr还可以设置为STDOUT
|
preexec_fn
|
钩子函数,在fork和exec之间执行 |
close_fds
|
|
shell
|
为True,表示用当前默认解释器执行。相当于args前面添加“/bin/sh”“-c或win下"cmd.exe /c "
|
cwd
|
指定工作目录 |
env
|
设置环境变量
|
universal_newlines
|
换行符统一处理成"\n"
|
startupinfo
|
在windows下的Win32 API 发送CreateProcess()创建进程
|
creationflags
|
在windows下的Win32 API 发送CREATE_NEW_CONSOLE()创建控制台窗口
|
方法
|
描述
|
Popen.communicate(input=None)
|
与子进程交互。读取从stdout和stderr缓冲区内容,阻塞父进程,等待子进程结束
|
Popen. kill()
|
杀死子进程,在Posix系统上发送SIGKILL信号
|
Popen.pid
|
获取子进程PID
|
Popen.poll()
|
如果子进程终止返回状态码
|
Popen.returncode
|
返回子进程状态码
|
Popen.send_signal(signal)
|
发送信号到子进程
|
Popen.stderr
|
如果参数值是PIPE,那么这个属性是一个文件对象,提供子进程错误输出。否则为None
|
Popen.stdin
|
如果参数值是PIPE,那么这个属性是一个文件对象,提供子进程输入。否则为None
|
Popen.stdout
|
如果参数值是PIPE,那么这个属性是一个文件对象,提供子进程输出。否则为None
|
Popen.terminate()
|
终止子进程,在Posix系统上发送SIGTERM信号,在windows下的Win32 API发送TerminateProcess()到子进程
|
Popen.wait()
|
等待子进程终止,返回状态码
|
类
|
描述
|
Queue.Empty
|
当非阻塞get()或get_nowait()对象队列上为空引发异常
|
Queue.Full
|
当非阻塞put()或put_nowait()对象队列是一个满的队列引发异常
|
Queue.LifoQueue(maxsize=0)
|
构造函数为后进先出队列。maxsize设置队列最大上限项目数量。小于或等于0代表无限。
|
Queue.PriorityQueue(maxsize=0)
|
构造函数为一个优先队列。级别越高越先出。
|
Queue.Queue(maxsize=0)
|
构造函数为一个FIFO(先进先出)队列。maxsize设置队列最大上限项目数量。小于或等于0代表无限。
|
Queue.deque
|
双端队列。实现快速append()和popleft(),无需锁。
|
Queue.heapq
|
堆排序队列。
|
方法
|
描述
|
Queue.empty()
|
如果队列为空返回True,否则返回False
|
Queue.full()
|
如果队列是满的返回True,否则返回False
|
Queue.get(block=True, timeout=None)
|
从队列中删除并返回一个项目。没有指定项目,因为是FIFO队列,如果队列为空会一直阻塞。timeout超时时间
|
Queue.get_nowait()
|
从队列中删除并返回一个项目,不阻塞。会抛出异常。
|
Queue.join()
|
等待队列为空,再执行别的操作
|
Queue.put(item, block=True, timeout=None)
|
写入项目到队列
|
Queue.put_nowait()
|
写入项目到队列,不阻塞。与get同理
|
Queue.qsize()
|
返回队列大小
|
Queue.task_done()
|
表示原队列的任务完成
|
方法
|
描述
|
StringIO.close()
|
关闭
|
StringIO.flush()
|
刷新缓冲区
|
StringIO.getvalue()
|
获取写入的数据
|
StringIO.isatty()
|
|
StringIO.next()
|
读取下一行,没有数据抛出异常
|
StringIO.read(n=-1)
|
默认读取所有内容。n指定读取多少字节
|
StringIO.readline(length=None)
|
默认读取下一行。length指定读取多少个字符
|
StringIO.readlines(sizehint=0)
|
默认读取所有内容,以列表返回。sizehint指定读取多少字节
|
StringIO.seek(pos, mode=0)
|
在文件中移动文件指针,从mode(0代表文件起始位置,默认。1代表当前位置。2代表文件末尾)偏移pos个字节
|
StringIO.tell()
|
返回当前在文件中的位置
|
StringIO.truncate()
|
截断文件大小 |
StringIO.write(str)
|
写字符串到文件
|
StringIO.writelines(iterable)
|
写入序列,必须是一个可迭代对象,一般是一个字符串列表
|
logging.Logger
|
应用程序记录日志的接口
|
logging.Filter
|
过滤哪条日志不记录
|
logging.FileHandler
|
日志写到磁盘文件
|
logging.Formatter
|
定义最终日志格式
|
级别
|
数字值
|
描述
|
critical
|
50
|
危险
|
error
|
40
|
错误
|
warning
|
30
|
警告 |
info
|
20
|
普通信息
|
debug
|
10
|
调试
|
noset
|
0
|
不设置
|
%(name)s
|
日志的名称
|
%(levelno)s
|
数字日志级别
|
%(levelname)s
|
文本日志级别
|
%(pathname)s
|
调用logging的完整路径(如果可用)
|
%(filename)s
|
文件名的路径名
|
%(module)s
|
模块名 |
%(lineno)d
|
调用logging的源行号
|
%(funcName)s
|
函数名
|
%(created)f
|
创建时间,返回time.time()值
|
%(asctime)s
|
字符串表示创建时间
|
%(msecs)d
|
毫秒表示创建时间
|
%(relativeCreated)d
|
毫秒为单位表示创建时间,相对于logging模块被加载,通常应用程序启动。
|
%(thread)d
|
线程ID(如果可用)
|
%(threadName)s
|
线程名字(如果可用)
|
%(process)d
|
进程ID(如果可用)
|
%(message)s
|
输出的消息
|
方法
|
描述
|
ConfigParser.add_section(section)
|
创建一个新的部分配置
|
ConfigParser.get(section, option, raw=False, vars=None)
|
获取部分中的选项值,返回字符串
|
ConfigParser.getboolean(section, option)
|
获取部分中的选项值,返回布尔值
|
ConfigParser.getfloat(section, option)
|
获取部分中的选项值,返回浮点数
|
ConfigParser.getint(section, option)
|
获取部分中的选项值,返回整数
|
ConfigParser.has_option(section, option)
|
检查部分中是否存在这个选项
|
ConfigParser.has_section(section)
|
检查部分是否在配置文件中
|
ConfigParser.items(section, raw=False, vars=None)
|
列表元组形式返回部分中的每一个选项
|
ConfigParser.options(section)
|
列表形式返回指定部分选项名称
|
ConfigParser.read(filenames)
|
读取ini格式的文件
|
ConfigParser.remove_option( section, option)
|
移除部分中的选项
|
ConfigParser.remove_section(section, option)
|
移除部分
|
ConfigParser.sections()
|
列表形式返回所有部分名称
|
ConfigParser.set(section, option, value)
|
设置选项值,存在则更新,否则添加
|
ConfigParser.write(fp)
|
写一个ini格式的配置文件
|
类
|
描述
|
urllib.urlopen(url, data=None, proxies=None)
|
读取指定URL,创建类文件对象。data是随着URL提交的数据(POST)
|
urllib/urllib2.quote(s, safe='/')
|
将字符串中的特殊符号转十六进制表示。如:
quote('abc def') -> 'abc%20def'
|
urllib/urllib2.unquote(s)
|
与quote相反
|
urllib.urlencode(query, doseq=0)
|
将序列中的两个元素(元组或字典)转换为URL查询字符串
|
urllib.urlretrieve(url, filename=None, reporthook=None, data=None)
|
将返回结果保存到文件,filename是文件名
|
urllib2.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False)
|
一般访问URL用urllib.urlopen(),如果要修改header信息就会用到这个。
data是随着URL提交的数据,将会把HTTP请求GET改为POST。headers是一个字典,包含提交头的键值对应内容。
|
urllib2.urlopen(url, data=None, timeout= |
timeout 超时时间,单位秒
|
urllib2.build_opener(*handlers)
|
构造opener
|
urllib2.install_opener(opener)
|
把新构造的opener安装到默认的opener中,以后urlopen()会自动调用
|
urllib2.HTTPCookieProcessor(cookiejar=None)
|
Cookie处理器
|
urllib2.HTTPBasicAuthHandler
|
认证处理器
|
urllib2.ProxyHandler
|
代理处理器
|
方法
|
描述
|
getcode()
|
获取HTTP状态码
|
geturl()
|
返回真实URL。有可能URL3xx跳转,那么这个将获得跳转后的URL
|
info()
|
返回服务器返回的header信息。可以通过它的方法获取相关值
|
next()
|
获取下一行,没有数据抛出异常
|
read(size=-1)
|
默认读取所有内容。size正整数指定读取多少字节
|
readline(size=-1)
|
默认读取下一行。size正整数指定读取多少字节
|
readlines(sizehint=0)
|
默认读取所有内容,以列表形式返回。sizehint正整数指定读取多少字节
|
JSON
|
Python
|
object
|
dict
|
array
|
list
|
string
|
unicode
|
number(int)
|
init,long
|
number(real)
|
float
|
true
|
Ture
|
false |
False
|
null
|
None
|
方法
|
描述
|
示例
|
time. asctime([tuple])
|
将一个时间元组转换成一个可读的24个时间字符串
|
>>> time.asctime(time.localtime())
'Sat Nov 12 01:19:00 2016'
|
time. ctime(seconds)
|
字符串类型返回当前时间
|
>>> time.ctime()
'Sat Nov 12 01:19:32 2016'
|
time. localtime([seconds])
|
默认将当前时间转换成一个(struct_timetm_year,tm_mon,tm_mday,tm_hour,tm_min,
tm_sec,tm_wday,tm_yday,tm_isdst)
|
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=12, tm_hour=1, tm_min=19, tm_sec=56, tm_wday=5, tm_yday=317, tm_isdst=0)
|
time. mktime(tuple)
|
将一个struct_time转换成时间戳
|
>>> time.mktime(time.localtime())
1478942416.0
|
time.sleep(seconds)
|
延迟执行给定的秒数
|
>>> time.sleep(1.5)
|
time. strftime(format[, tuple])
|
将元组时间转换成指定格式。[tuple]不指定默认以当前时间
|
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2016-11-12 01:20:54'
|
time.time()
|
返回当前时间时间戳
|
>>> time.time()
1478942466.45977
|
指令
|
描述
|
%a
|
简化星期名称,如Sat
|
%A
|
完整星期名称,如Saturday
|
%b
|
简化月份名称,如Nov
|
%B
|
完整月份名称,如November
|
%c
|
当前时区日期和时间
|
%d
|
天
|
%H
|
24小时制小时数(0-23)
|
%I
|
12小时制小时数(01-12)
|
%j
|
365天中第多少天
|
%m
|
月
|
%M
|
分钟
|
%p
|
AM或PM,AM表示上午,PM表示下午
|
%S
|
秒
|
%U
|
一年中第几个星期
|
%w
|
星期几 |
%W
|
一年中第几个星期
|
%x
|
本地日期,如'11/12/16'
|
%X
|
本地时间,如'17:46:20'
|
%y
|
简写年名称,如16
|
%Y
|
完整年名称,如2016 |
%Z
|
当前时区名称(PST:太平洋标准时间)
|
%%
|
代表一个%号本身
|
类
|
描述
|
datetime.date()
|
日期,年月日组成
|
datetime.datetime()
|
包括日期和时间
|
datetime.time()
|
时间,时分秒及微秒组成
|
datetime.timedelta()
|
时间间隔
|
datetime.tzinfo()
|
|
方法
|
描述
|
描述
|
date.max
|
对象所能表示的最大日期
|
datetime.date(9999, 12, 31)
|
date.min
|
对象所能表示的最小日期
|
datetime.date(1, 1, 1)
|
date.strftime()
|
根据datetime自定义时间格式
|
>>> date.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
'2016-11-12 07:24:15
|
date.today()
|
返回当前系统日期 |
>>> date.today()
datetime.date(2016, 11, 12)
|
date.isoformat()
|
返回ISO 8601格式时间(YYYY-MM-DD)
|
>>> date.isoformat(date.today())
'2016-11-12'
|
date.fromtimestamp()
|
根据时间戳返回日期
|
>>> date.fromtimestamp(time.time())
datetime.date(2016, 11, 12)
|
date.weekday()
|
根据日期返回星期几,周一是0,以此类推
|
>>> date.weekday(date.today())
5
|
date.isoweekday()
|
根据日期返回星期几,周一是1,以此类推
|
>>> date.isoweekday(date.today())
6
|
date.isocalendar()
|
根据日期返回日历(年,第几周,星期几)
|
>>> date.isocalendar(date.today())
(2016, 45, 6)
|
方法
|
描述
|
示例
|
datetime.now()/datetime.today()
|
获取当前系统时间 |
>>> datetime.now()
datetime.datetime(2016, 11, 12, 7, 39, 35, 106385)
|
date.isoformat()
|
返回ISO 8601格式时间
|
>>> datetime.isoformat(datetime.now())
'2016-11-12T07:42:14.250440'
|
datetime.date()
|
返回时间日期对象,年月日
|
>>> datetime.date(datetime.now())
datetime.date(2016, 11, 12)
|
datetime.time()
|
返回时间对象,时分秒
|
>>> datetime.time(datetime.now())
datetime.time(7, 46, 2, 594397)
|
datetime.utcnow()
|
UTC时间,比中国时间快8个小时
|
>>> datetime.utcnow()
datetime.datetime(2016, 11, 12, 15, 47, 53, 514210)
|
方法
|
描述
|
示例
|
time.max
|
所能表示的最大时间
|
>>> time.max
datetime.time(23, 59, 59, 999999)
|
time.min
|
所能表示的最小时间
|
>>> time.min
datetime.time(0, 0)
|
time.resolution
|
时间最小单位,1微妙
|
>>> time.resolution
datetime.timedelta(0, 0, 1)
|