Python自带很多模块,这里描述一些常用的模块(标准库)中的重要函数和变量。
1、sys模块
(1)argv
l 命令行参数List,包括Python脚本名(sys.argv[0])
(2)exit([arg])
l 退出当前程序(具有UNIX风格);可以指定一个整数来表明程序执行结果,或者指定一个字符串来提供错误信息或执行结果信息
(3)modules
l 模块名映射到实际模块的Dictionary。下面是输出已导入的模块名List的例子:
>>> import sys, pprint
>>> pprint.pprint([key for key in sys.modules.keys() if key[0] != '_' and sys.modules.get(key) != None])
(4)path
l 导入模块时,Python查找模块的路径List
(5)platform
l Python运行平台的简名String
(6)stdin/stdout/stderr
l 标准输入流/输出流/错误流,类文件对象
2、os模块
(1)environ
l 映射操作系统环境变量的Dictionary,可以用于改变环境变量的值。但不是所有的平台都支持。
(2)system(command)
l 执行操作系统命令(外部程序),下面是打开firfox浏览器的例子:
>>> import os
>>> os.system(r'"C:/Program Files/Mozilla Firefox/firefox.exe"')
l 由于目录名中间有空格,所以必须用引号将路径引起来;另外,在启动外部程序运行时,Python将控制权交给外部程序,自身处于等待状态,直到外部程序运行结束后交还控制权。
l 在Windows平台有个更好用的函数startfile():
os.startfile(r'c:/Program Files/Mozilla Firefox/firefox.exe')
l 这里路径不需要用引号引起来,即使路径中有空白字符;并且Python会在新的Shell中执行外部程序,自身不会处于等待状态,可以直接运行后续脚本。
(3)sep
l 路径名字间分割符
(4)pathsep
l 多路经(例如环境变量PYTHONPATH)的路径之间的分割符
(5)linesep
l 文本文件中行分割符
3、fileinput模块
fileinput模块使你能够方便的遍历一系列文本文件的所有行。脚本运行时,文本文件作为命令行参数指定,如果不指定默认为标准输入(sys.stdin)。
(1)input([files[, inplace[, backup]])
l 返回一个用于遍历多输入流的所有行的对象
l 可以设置files参数来指定多个文件名的Sequence
l 可以设置inplace=True,进行替换处理
l 可以设置backup参数指定文件扩展名,以便在进行替换处理时创建备份文件
(2)filename()
l 返回当前处理的文件名
(3)lineno()
l 返回当前行数,这是累计的行数(从1开始)
(4)filelineno()
l 返回当前文件中的行数(从1开始)
(5)isfirstline()
l 如果是当前文件的第一行返回True,否则返回False
(6)isstdin()
l 如果是当前文件是sys.stdin返回True,否则返回False
(7)nextfile()
l 关闭当前文件,跳到下一个文件;跳过的行数不计算在lineno()中
(8)close()
l 关闭整个文件链,结束遍历
l 下面是给文件添加行号的简单例子:
# numberlines.py
import fileinput
for line in fileinput.input(inplace=True):
line = line.rstrip()
num = fileinput.filelineno()
print '%-40s # %2i' % (line, num)
4、time模块
time模块用于日期和时间的维护,以及字符串和日期之间的转换。
(1)日期表示形式
l 以秒为单位的浮点数
l 包含9个整数的日期Tuple,例如:(2009, 3, 4, 17, 16, 7, 2, 63, 0)
l 日期Tuple的字段说明如下:
索引 字段 值
0 年 4位,YYYY
1 月 1–12
2 日 1–31
3 小时 0–23
4 分钟 0–59
5 秒 0–61(包括闰秒和双闰秒)
6 星期 0–6,星期一是0
7 公历日 1–366
8 夏令时 0, 1, or –1(布尔值)
(2)localtime([secs])
l 将秒数转换为日期Tuple(本地日期)
l 如果不提供参数或为None,则使用当前时间
(3)mktime(tuple)
l 和localtime()函数相反,将日期Tuple转换为秒数(本地日期)
(4)sleep(secs)
l 使程序挂起指定的秒数再执行
(5)strftime(format[, tuple])
l 将日期Tuple转换为指定格式的日期字符串
l 常用的格式指令如下:
指令 含义
%d 月的天数[01,31]
%H 小时[00,23]
%m 月[01,12]
%M 分钟[00,59]
%S 秒[00,61] (包括闰秒和双闰秒)
%Y 4位年
%% %字符
(6)strptime( string[, format])
l 和strftime()函数相反,将指定格式的日期字符串转换为日期Tuple;格式指令和strftime()函数使用的相同
(7)日期计算
l 下面是日期字符串进行日期计算的工具类:
#DateTimeUtils.py
import time
import datetime
# DateTime String Utilities
class DateTimeUtils:
@staticmethod
def addDay(str, format, n):
timeTuple = time.strptime(str, format)
oldDate = datetime.date(timeTuple[0], timeTuple[1], timeTuple[2])
newDate = oldDate + datetime.timedelta(days=n)
return time.strftime(format, newDate.timetuple())
l 这里使用了datetime模块提供的date和timedelta对象,用来支持日期的计算
l timedelta对象表示2个日期之间的时间期间
l addDay()函数的处理过程如下:
Ø 将日期字符串转换为日期Tuple
Ø 根据日期Tuple创建datetime.date对象
Ø 使用datetime.timedelta对象,在当前日期基础上加指定日数(可以为负数)
Ø 将计算后的日期转换为日期字符串
l 下面是一些执行的结果:
>>> from DateTimeUtils import DateTimeUtils
>>> print DateTimeUtils.addDay('20090301', '%Y%m%d', -2)
'20090227'
>>> DateTimeUtils.addDay('2009-03-05', '%Y-%m-%d', 7)
'2009-03-12'
5、random模块
random模块用来产生各种随机数。下面是些常用的函数:
(1)random()
l 返回0-1之间的浮点数(0
(2)uniform(a, b)
l 返回a-b之间的浮点数(a
(3)randrange([start], stop, [step])
l 使用相同参数调用range()函数,返回一个随机整数
(4)choice(seq)
l 从指定Sequence中返回一个元素
(5)shuffle(seq[, random])
l 对指定Sequence中的元素顺序进行洗牌
(6)sample(seq, n)
l 从指定Sequence中返回n个不同的元素
(7)下面是随机抽取纸牌的例子:
#cards.py
from random import shuffle
from random import choice
values = range(2, 11) + 'Jack Queen King A'.split()
suits = 'diamonds clubs hearts spades'.split()
deck = ['%s of %s' % (v, s) for v in values for s in suits]
shuffle(deck)
while deck:
randomCard = choice(deck)
print randomCard
deck.remove(randomCard)