Exceptions 模块
该模块定义了以下标准异常:
• Exception 是所有异常的基类. 强烈建议(但不是必须)自定义的异常异常也继承这个类.
• SystemExit(Exception) 由 sys.exit 函数引发. 如果它在最顶层没有被 try-except 语句捕获, 那么解释器将直接关闭而不会显示任何跟踪返回信息.
• StandardError(Exception) 是所有内建异常的基类(除 SystemExit外).
• KeyboardInterrupt(StandardError) 在用户按下 Control-C(或其他打断按键)后 被引发. 如果它可能会在你使用 "捕获所有" 的 try-except语句时导致奇怪的问题.
• ImportError(StandardError) 在 Python 导入模块失败时被引发.
• EnvironmentError 作为所有解释器环境引发异常的基类. (也就是说,这些异常一般不是由于程序 bug 引起).
• IOError(EnvironmentError) 用于标记 I/O 相关错误.
• OSError(EnvironmentError) 用于标记 os 模块引起的错误.
• WindowsError(OSError) 用于标记 os 模块中 Windows 相关错误.
• NameError(StandardError) 在 Python 查找全局或局部名称失败时被引发.
• UnboundLocalError(NameError) , 当一个局部变量还没有赋值就被使用时, 会引发这个异常. 这个异常只有在 2.0 及之后的版本有; 早期版本只会引发一个普通的 NameError .
• AttributeError(StandardError) , 当 Python 寻找(或赋值)给一个实例属性, 方法, 模块功能或其它有效的命名失败时, 会引发这个异常.
• SyntaxError(StandardError) , 当解释器在编译时遇到语法错误, 这个异常就被引发.
• (2.0 及以后版本) IndentationError(SyntaxError) 在遇到非法的缩进时被引发. 该异常只用于 2.0 及以后版本, 之前版本会引发一个SyntaxError 异常.
• (2.0 及以后版本) TabError(IndentationError) , 当使用 -tt 选项检查不一致缩进时有可能被引发. 该异常只用于 2.0 及以后版本, 之前版本会引发一个 SyntaxError 异常.
• TypeError(StandardError) , 当给定类型的对象不支持一个操作时被引发.
• AssertionError(StandardError) 在 assert 语句失败时被引发(即表达式为 false 时).
• LookupError(StandardError) 作为序列或字典没有包含给定索引或键时所引发异常的基类.
• IndexError(LookupError) , 当序列对象使用给定索引数索引失败时(不存在索引对应对象)引发该异常.
• KeyError(LookupError) 当字典对象使用给定索引索引失败时(不存在索引对应对象)引发该异常.
• ArithmeticError(StandardError) 作为数学计算相关异常的基类.
• OverflowError(ArithmeticError) 在操作溢出时被引发(例如当一个整数太大, 导致不能符合给定类型).
• ZeroDivisionError(ArithmeticError) , 当你尝试用 0 除某个数时被引发.
• FloatingPointError(ArithmeticError) , 当浮点数操作失败时被引发.
• ValueError(StandardError) , 当一个参数类型正确但值不合法时被引发.
• (2.0 及以后版本) UnicodeError(ValueError) , Unicode 字符串类型相关异常. 只使用在 2.0 及以后版本.
• RuntimeError(StandardError) , 当出现运行时问题时引发, 包括在限制模式下尝试访问外部内容, 未知的硬件问题等等.
• NotImplementedError(RuntimeError) , 用于标记未实现的函数, 或无效的方法.
• SystemError(StandardError) , 解释器内部错误. 该异常值会包含更多的细节 (经常会是一些深层次的东西, 比如 "eval_code2: NULLglobals" ) . 这本书的作者编了 5 年程序都没见过这个错误. (想必是没有用 raise SystemError ).
• MemoryError(StandardError) , 当解释器耗尽内存时会引发该异常. 注意只有在底层内存分配抱怨时这个异常才会发生; 如果是在你的旧机器上, 这个异常发生之前系统会陷入混乱的内存交换中.
注意:exceptions 模块提供了标准异常的层次结构. Python 启动的时候会自动导入这个模块,你可以创建自己的异常类. 只需要继承内建的 Exception 类(或者它的任意一个合适的子类)即可, 有需要时可以再重载它的 _ _str_ _
方法
os 模块
这个模块中的大部分函数通过对应平台相关模块实现, 比如 posix 和 nt. os模块会在第一次导入的时候自动加载合适的执行模块.
- os.rename(src, dst):重命名文件或目录,从 src 到 dst
- os.renames(old, new):递归地对目录进行更名,也可以对文件进行更名。
- os.remove(path):删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个directory。
- os.rmdir(path):删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
- os.removedirs(path):递归删除目录。
- os.mkdir(path[, mode]):以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
- os.makedirs(path[, mode]):递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
- os.listdir(path):列举目录下的所有文件。返回的是列表类型。
- os.getcwd():查看当前所在路径。
- os.chdir(path):改变当前工作目录。
- os.stat(file):stat 函数可以用来获取一个存在文件的信息,它返回一个类元组对象(stat_result 对象, 包含 10 个元素), 依次是 st_mode (权限模式), st_ino (inode number), st_dev (device), st_nlink (number of hardlinks), st_uid (所有者用户 ID), st_gid (所有者所在组 ID ), st_size (文件大小, 字节), st_atime (最近一次访问时间), st_mtime (最近修改时间),st_ctime (平台相关; Unix 下的最近一次元数据/metadata 修改时间, 或者Windows 下的创建时间) - 以上项目也可作为属性访问.
- #返回对象中有些属性在非 Unix 平台下是无意义的, 比如 (st_inode , st_dev )为 Unix 下的为每个文件提供了唯一标识, 在其他平台可能为任意无意义数据 .可以使用 chmod 和 utime 函数修改文件的权限模式和时间属性。
- os.chmod(path,mode):修改文件的权限模式。#mode=(stat.S_IXOTH: 其他用户有执行权0o001,stat.S_IWOTH: 其他用户有写权限0o002,stat.S_IROTH: 其他用户有读权限0o004,stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007,stat.S_IXGRP: 组用户有执行权限0o010,stat.S_IWGRP: 组用户有写权限0o020,stat.S_IRGRP: 组用户有读权限0o040,stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070,stat.S_IXUSR: 拥有者具有执行权限0o100,stat.S_IWUSR: 拥有者具有写权限0o200,stat.S_IRUSR: 拥有者具有读权限0o400,stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700,stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000,stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000,stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000,stat.S_IREAD: windows下设为只读,stat.S_IWRITE: windows下取消只读)
- os.utime(path, times):返回指定的path文件的访问和修改的时间。#times -- 如果时间是 None, 则文件的访问和修改设为当前时间 。 否则, 时间是一个 2-tuple数字, (atime, mtime) 用来分别作为访问和修改的时间。
- os.system(command):command是要执行的命令,相当于在Windows的cmd窗口中输入的命令。
- os.execvp(‘python’, (program,arguments):把当前运行的py文件替换成arguments,并返回结果。
- os.fork():unix下,创建一个进程。
- os.wait():unix下,函数用于等待子进程结束。
- os.spawnv(mode, file, args): #mode: 模式,来自 os 模块,mode = os.P_NOWAIT,返回进程号,mode = os.P_WAIT,返回进程退出的编码,如果返回值是负值,表示有错误,用来控制子程序是否等待执行完成;file: 可执行文件,args: 执行参数;执行文件的参数,不能为空,可以设置为 ''(空字符串)。
- os.spawnv(mode, path, argv):在子进程中执行路径指定的程序。模式-进程的创建模式。路径-可执行文件的路径。argv-字符串或字符串列表。
- sys.exit():终止当前进程。
- os.name:返回当前操作系统名称。
- os.environ:是一个字符串所对应环境的映像对象。
- os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]):os.walk() 方法用于通过在目录树种游走输出在目录中的文件名。
top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
followlinks -- 设置为 true,则通过软链接访问目录。
注意:如果需要删除非空目录, 你可以使用 shutil 模块中的 rmtree 函数
os.path 模块
os.path 模块包含了各种处理长文件名(路径名)的函数。
- os.path.split(path):将路径分解为(文件夹,文件名),返回的是元组类型。若路径字符串最后一个字符是\,则只有文件夹部分有值;若路径字符串中均无\,则只有文件名部分有值。若路径字符串有\,且不在最后,则文件夹和文件名均有值。
- os.path.splitext('c:\\csv\\test.csv'),('c:\\csv\\test', '.csv'):分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作
- os.path.dirname(path):返回path中的文件夹部分,结果不包含\
- os.path.basename(path):返回path中的文件名。
- os.path.abspath(path):返回path的绝对路径。
- os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。
- os.path.walk(top,func,arg):#(1)参数top表示需要遍历的目录路径。(2)参数func表示回调函数,即对遍历路径进行处理的函数。所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务。注意:walk的回调函数必须提供三个参数:第1个参数为os.path.walk的参数arg,第2个参数表示目录dirname,第3个参数表示文件列表names。注意:os.path.walk的回调函数中的文件列表不和os.walk()那样将子目录和文件分开,而是混为了一摊,需要在回调函数中判断是文件还是子目录。(3)参数arg是传递给回调函数的元组,为回调函数提供处理参数,arg可以为空。回调函数的第1个参数就是用来接收这个传入的元组的。
- os.path.getmtime(path):文件或文件夹的最后修改时间,从新纪元到访问时的秒数。
- os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数。
- os.path.getctime(path):文件或文件夹的创建时间,从新纪元到访问时的秒数。
- os.path.getsize(path):文件或文件夹的大小,若是文件夹返回0。
- os.path.exists(path):文件或文件夹是否存在,返回True 或 False。
string 模块
string 模块提供了一些用于处理字符串类型的函数。
text = "Monty Python's Flying Circus"
print "upper", "=>", string.upper(text)
upper => MONTY PYTHON'S FLYING CIRCUS
print "lower", "=>", string.lower(text)
lower => monty python's flying circus
print "split", "=>", string.split(text)
split => ['Monty', "Python's", 'Flying', 'Circus']
print "join", "=>", string.join(string.split(text), "+")
join => Monty+Python's+Flying+Circus
print "replace", "=>", string.replace(text, "Python", "Java")
replace => Monty Java's Flying Circus
print "find", "=>", string.find(text, "Python"), string.find(text,
"Java")
find => 6 -1
print "count", "=>", string.count(text, "n")
count => 3
等价于字符串的操作方法
print "upper", "=>", text.upper()
print "lower", "=>", text.lower()
print "split", "=>", text.split()
print "join", "=>", "+".join(text.split())
print "replace", "=>", text.replace("Python", "Perl")
print "find", "=>", text.find("Python"), text.find("Perl")
print "count", "=>", text.count("n")
math 模块
math 模块实现了许多对浮点数的数学运算函数. 这些函数一般是对平台 C 库中同名函数的简单封装, 所以一般情况下, 不同平台下计算的结果可能稍微地有所不同, 有时候甚至有很大出入.
import math
print "e", "=>", math.e
print "pi", "=>", math.pi
print "hypot", "=>", math.hypot(3.0, 4.0)
# and many others...
e => 2.71828182846
pi => 3.14159265359
hypot => 5.0
cmath 模块
cmath 模块包含了一些用于复数运算的函数
import cmath
print "pi", "=>", cmath.pi
print "sqrt(-1)", "=>", cmath.sqrt(-1)
pi => 3.14159265359
sqrt(-1) => 1j
operator 模块
operator 模块为 Python 提供了一个 “功能性” 的标准操作符接口. 当使用map 以及 filter 一类的函数的时候, operator 模块中的函数可以替换一些lambda 函式.
import operator
sequence = 1, 2, 4
print "add", "=>", reduce(operator.add, sequence)
print "sub", "=>", reduce(operator.sub, sequence)
print "mul", "=>", reduce(operator.mul, sequence)
print "concat", "=>", operator.concat("spam", "egg")
print "repeat", "=>", operator.repeat("spam", 5)
print "getitem", "=>", operator.getitem(sequence, 2)
print "indexOf", "=>", operator.indexOf(sequence, 2)
print "sequenceIncludes", "=>", operator.sequenceIncludes(sequence, 3)
add => 7
sub => -5
mul => 8
concat => spamegg
repeat => spamspamspamspamspam
getitem => 4
indexOf => 1
sequenceIncludes => 0
使用 operator 模块检查类型:
import operator
import UserList
def dump(data):
print type(data), "=>",
if operator.isCallable(data):
print "CALLABLE",
if operator.isMappingType(data):
print "MAPPING",
if operator.isNumberType(data):
print "NUMBER",
if operator.isSequenceType(data):
print "SEQUENCE",
print
dump(0)
dump("string")
dump("string"[0])
dump([1, 2, 3])
dump((1, 2, 3))
dump({"a": 1})
dump(len) # function 函数
dump(UserList) # module 模块
dump(UserList.UserList) # class 类
dump(UserList.UserList()) # instance 实例
<type 'int'> => NUMBER
<type 'string'> => SEQUENCE
<type 'string'> => SEQUENCE
<type 'list'> => SEQUENCE
<type 'tuple'> => SEQUENCE
<type 'dictionary'> => MAPPING
<type 'builtin_function_or_method'> => CALLABLE
<type 'module'> =>
<type 'class'> => CALLABLE
<type 'instance'> => MAPPING NUMBER SEQUENCE
copy 模块
copy 模块包含两个函数, 用来拷贝对象
copy.copy() :浅拷贝
copy.deepcopy() :深拷贝
sys 模块
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分.
- sys.argv : 使用 sys 模块获得脚本的参数
- sys.modules.keys() :使用 sys 模块查找已导入的模块
- sys.platform : 使用 sys 模块获得当前平台
- sys.exit():退出程序
- sys.stdout.write('hello'+'\n'):重定向输出用来从定义print格式。sys.stdout.write() = print()
- hi=sys.stdin.readline()[:-1] #-1表示放弃最后一个字符'\n':重定向输入用来定义Input格式。sys.stdin.readline() = input()
- 使用 sys 模块查找内建模块:
import sys
def dump(module):
print module, "=>",
if module in sys.builtin_module_names:
print "<BUILTIN>"
else:
module = _ _import_ _(module)
print module._ _file_ _
dump("os")
dump("sys")
dump("string")
dump("strop")
dump("zlib")
os => C:\python\lib\os.pyc
sys => <BUILTIN>
string => C:\python\lib\string.pyc
strop => <BUILTIN>
zlib => C:\python\zlib.pyd
- 使用 sys 模块获得引用记数:
import sys
variable = 1234
print sys.getrefcount(0)
print sys.getrefcount(variable)
print sys.getrefcount(None)
50
3
192
注意:这个值总是比实际的数量大, 因为该函数本身在确定这个值的时候依赖这个对象.
atexit 模块
atexit 模块允许你注册一个或多个终止函数, 这些函数将在解释器终止前被自动调用.
- atexit.register(func) : 调用 register 函数, 便可以将函数注册为终止函数,该模块其实是一个对 sys.exitfunc 钩子( hook )的简单封装.
time 模块
time 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装.
- time.time(): 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
- time.localtime():获取本地时间。
- time.gmtime():获取国际时间.#localtime 和 gmtime 返回的类元组包括年, 月, 日, 时, 分, 秒, 星期, 一年的第几天, 日光标志. 其中年是一个四位数(在有千年虫问题的平台上另有规定, 但还是四位数), 星期从星期一(数字 0 代表)开始, 1 月 1 日是一年的第一天.
- 使用 time 模块格式化时间输出:
import time
now = time.localtime(time.time())
print time.ctime(now)
print time.strftime("%y/%m/%d %H:%M", now)
print time.strftime("%a %b %d", now)
print time.strftime("%c", now)
print time.strftime("%I %p", now)
print time.strftime("%Y-%m-%d %H:%M:%S %Z", now)
# do it by hand...
year, month, day, hour, minute, second, weekday, yearday, daylight = now
print "%04d-%02d-%02d" % (year, month, day)
print "%02d:%02d:%02d" % (hour, minute, second)
print ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")[weekday], yearday
Sun Oct 10 21:39:24 1999
99/10/10 21:39
Sun Oct 10
Sun Oct 10 21:39:24 1999
09 PM
1999-10-10 21:39:24 CEST
1999-10-10
21:39:24
SUN 283
%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 当前时区的名称
%% %号本身
fileinput 模块
fileinput 模块允许你循环一个或多个文本文件的内容。
fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
files: #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
inplace: #是否将标准输出的结果写回文件,默认不取代
backup: #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize: #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
mode: #读写模式,默认为只读
openhook: #该钩子用于控制打开的所有文件,比如说编码方式等;
常用方法
- fileinput.input() #返回能够用于for循环遍历的对象
- fileinput.filename() #返回当前文件的名称
- fileinput.lineno() #返回当前已经读取的行的数量(或者序号)
- fileinput.filelineno() #返回当前读取的行的行号
- fileinput.isfirstline() #检查当前行是否是文件的第一行
- fileinput.isstdin() #判断最后一行是否从stdin中读取
- fileinput.close() #关闭队列
shutil 模块
shutil 实用模块包含了一些用于复制文件和文件夹的函数.
- shutil.copyfileobj(fsrc, fdst[, length]):将文件内容拷贝到另一个文件中。需要open读取内容。
- shutil.copyfile(src, dst):拷贝文件
- shutil.copymode(src, dst):仅拷贝权限。内容、组、用户均不变
- shutil.copystat(src, dst):仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
- shutil.copy(src, dst):拷贝文件和权限
- shutil.copy2(src, dst):拷贝文件和状态信息
- shutil.copytree(src, dst, symlinks=False, [ignore=None,ignore=shutil.ignore_patterns('*.pyc', 'tmp*')]):递归的去拷贝文件夹
- shutil.rmtree(path[, ignore_errors[, onerror]]):递归的去删除文件
- shutil.move(src, dst):递归的去移动文件,它类似mv命令,其实就是重命名。
- shutil.make_archive(base_name, format,...):创建压缩包并返回文件路径,例如:zip、tar。base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”。
tempfile 模块
- tempfile.mktemp():创建临时文件。
- tempfile.TemporaryFile():打开临时文件
StringIO 模块
它实现了一个工作在内存的文件对象 (内存文件).
- StringIO.StringIO(MESSAGE):从内存文件读入内容类似于读取字符串。
- StringIO.StringIO().write():使用 StringIO 模块向内存文件写入内容
glob 模块
glob(pattern) 返回满足给定模式的所有文件的列表.
glob.glob("*.jpg"):返回所有当前目录下的jpg文件。这里的 glob 返回完整路径名。这里的模式和正则表达式类似, 但更简单. 星号(* ) 匹配零个或更多个字符,问号(? ) 匹配单个字符. 你也可以使用方括号来指定字符范围, 例如 [0-9]代表一个数字. 其他所有字符都代表它们本身.
random 模块
random 模块包含许多随机数生成器.
- random.random():随机浮点数:0.0 <数字<1.0
- random.uniform(10, 20):随机浮点数:10 <=数字<20
- random.randint(100, 1000):随机整数:100 <=数字<= 1000
- random.randrange(100, 1000, 2):随机整数:100 <=数字<1000中的偶数
- random.choice([1, 2, 3, 5, 9]):从序列取出随机项
- random.shuffle(list):打乱已有的序列。
hashlib 模块
hashlib提供了常见的摘要算法,如MD5,SHA1等等。
import hashlib
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?')
print md5.hexdigest()
计算结果如下:
d26a53750bc40b38b65a520292f69306
常用加密方法:
print hashlib.md5(str).hexdigest()
print hashlib.sha1(str).hexdigest()
print hashlib.sha224(str).hexdigest()
print hashlib.sha256(str).hexdigest()
print hashlib.sha384(str).hexdigest()
print hashlib.sha512(str).hexdigest()