python手册

  • Post author:
  • Post category:python




python实例手册

#encoding:utf8

# 设定编码-支持中文

0说明



手册制作: 雪松 littlepy reboot



更新日期: 2014-10-29



欢迎系统运维加入Q群: 198173206  # 加群请回答问题



欢迎运维开发加入Q群: 365534424  # 不定期技术分享



请使用”notepad++”打开此文档,”alt+0″将函数折叠后方便查阅



请勿删除信息,转载请说明出处,抵制不道德行为。



错误在所难免,还望指正!



# python实例手册下载地址:



http://hi.baidu.com/quanzhou722/item/cf4471f8e23d3149932af2a7






# shell实例手册最新下载地址:



http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9



# LazyManage运维批量管理软件下载[shell]:



http://hi.baidu.com/quanzhou722/item/4ccf7e88a877eaccef083d1a






# LazyManage运维批量管理软件下载[python]:



http://hi.baidu.com/quanzhou722/item/4213db3626a949fe96f88d3c

1 基础



查看帮助



import os



for i in dir(os):



print i         # 模块的方法



help(os.path)       # 方法的帮助



调试



python -m trace -t aaaaaa.py






pip模块安装






yum install python-pip            # centos安装pip



sudo apt-get install python-pip   # ubuntu安装pip



pip官方安装脚本



wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py



python get-pip.py



加载环境变量



vim /etc/profile



export PATH=/usr/local/python27/bin:$PATH



. /etc/profile



pip install Package             # 安装包 pip install requests



pip show –files Package        # 查看安装包时安装了哪些文件



pip show –files Package        # 查看哪些包有更新



pip install –upgrade Package   # 更新一个软件包



pip uninstall Package           # 卸载软件包



变量



r=r’\n’          # 输出时原型打印



u=u’中文’        # 定义为unicode编码



global x         # 全局变量



a = 0 or 2 or 1  # 布尔运算赋值,a值为True既不处理后面,a值为2.  None、字符串”、空元组()、空列表[],空字典{}、0、空字符串都是false



name = raw_input(“input:”).strip()        # 输入字符串变量



num = int(raw_input(“input:”).strip())    # 输入字符串str转为int型



locals()                                  # 所有局部变量组成的字典



locals().values()                         # 所有局部变量值的列表



os.popen(“date -d @{0} +’%Y-%m-%d %H:%M:%S'”.format(12)).read()    # 特殊情况引用变量 {0} 代表第一个参数



打印



# 字符串 %s  整数 %d  浮点 %f  原样打印 %r



print ‘字符串: %s 整数: %d 浮点: %f 原样打印: %r’ % (‘aa’,2,1.0,’r’)



print ‘abc’,      # 有逗号,代表不换行打印,在次打印会接着本行打印



列表



# 列表元素的个数最多 536870912



shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]



shoplist[2] = ‘aa’



del shoplist[0]



shoplist.insert(‘4′,’www’)



shoplist.append(‘aaa’)



shoplist[::-1]    # 倒着打印 对字符翻转串有效



shoplist[2::3]    # 从第二个开始每隔三个打印



shoplist[:-1]     # 排除最后一个



‘\t’.join(li)     # 将列表转换成字符串



sys.path[1:1]=[5] # 在位置1前面插入列表中一个值



list(set([‘qwe’, ‘as’, ‘123’, ‘123’]))   # 将列表通过集合去重复



eval(“[‘1′,’a’]”)                        # 将字符串当表达式求值,得到列表



元组



# 不可变



zoo = (‘wolf’, ‘elephant’, ‘penguin’)



字典



ab = {       ‘Swaroop’   : ‘swaroopch@byteofpython.info’,



‘Larry’     : ‘larry@wall.org’,



}



ab[‘c’] = 80      # 添加字典元素



del ab[‘Larry’]   # 删除字典元素



ab.keys()         # 查看所有键值



ab.values()       # 打印所有值



ab.has_key(‘a’)   # 查看键值是否存在



ab.items()        # 返回整个字典列表






复制字典



a = {1: {1: 2, 3: 4}}



b = a



b[1][1] = 8888                # a和b都为 {1: {1: 8888, 3: 4}}



import copy



c = copy.deepcopy(a)          # 再次赋值 b[1][1] = 9999 拷贝字典为新的字典,互不干扰






a[2] = copy.deepcopy(a[1])    # 复制出第二个key,互不影响  {1: {1: 2, 3: 4},2: {1: 2, 3: 4}}



流程结构



if判断



# 布尔值操作符 and or not 实现多重判断



if a == b:



print ‘==’



elif a < b:



print b



else:



print a



fi



while循环



while True:



if a == b:



print “==”



break



print “!=”



else:



print ‘over’






count=0



while(count<9):



print count



count += 1



for循环



sorted()           # 返回一个序列(列表)



zip()              # 返回一个序列(列表)



enumerate()        # 返回循环列表序列 for i,v in enumerate([‘a’,’b’]):



reversed()         # 反序迭代器对象



dict.iterkeys()    # 通过键迭代



dict.itervalues()  # 通过值迭代



dict.iteritems()   # 通过键-值对迭代



randline()         # 文件迭代



iter(obj)          # 得到obj迭代器 检查obj是不是一个序列



iter(a,b)          # 重复调用a,直到迭代器的下一个值等于b



for i in range(1, 5):



print i



else:



print ‘over’



list = [‘a’,’b’,’c’,’b’]



for i in range(len(list)):



print list[i]



for x, Lee in enumerate(list):



print “%d %s Lee” % (x+1,Lee)






# enumerate 使用函数得到索引值和对应值



for i, v in enumerate([‘tic’, ‘tac’, ‘toe’]):



print(i, v)



流程结构简写



[ i * 2 for i in [8,-2,5]]



[16,-4,10]



[ i for i in range(8) if i %2 == 0 ]



[0,2,4,6]



tab补全



# vim /usr/lib/python2.7/dist-packages/tab.py



# python startup file



import sys



import readline



import rlcompleter



import atexit



import os



# tab completion



readline.parse_and_bind(‘tab: complete’)



# history file



histfile = os.path.join(os.environ[‘HOME’], ‘.pythonhistory’)



函数



def printMax(a, b = 1):



if a > b:



print a



return a



else:



print b



return b



x = 5



y = 7



printMax(x, y)



def update(*args,**kwargs):



p=”



for i,t in kwargs.items():



p = p+ ‘%s=%s,’ %(i,str(t))



sql = “update  ‘user’ set (%s) where (%s)” %(args[0],p)



print sql



update(‘aaa’,uu=’uu’,id=3)



模块



# Filename: mymodule.py



def sayhi():



print ‘mymodule’



version = ‘0.1’






# 使用模块中方法



import mymodule



from mymodule import sayhi, version



mymodule.sayhi()   # 使用模块中函数方法



类对象的方法



class Person:



# 实例化初始化的方法



def __init__(self, name ,age):



self.name = name



self.age = age



print self.name



# 有self此函数为方法



def sayHi(self):



print ‘Hello, my name is’, self.name



# 对象消逝的时候被调用



def __del__(self):



print ‘over’



# 实例化对象



p = Person(‘Swaroop’)



# 使用对象方法



p.sayHi()



# 继承



class Teacher(Person):



def __init__(self, name, age, salary):



Person.__init__(self, name, age)



self.salary = salary



print ‘(Initialized Teacher: %s)’ % self.name



def tell(self):



Person.tell(self)



print ‘Salary: “%d”‘ % self.salary



t = Teacher(‘Mrs. Shrividya’, 40, 30000)



执行模块类中的所有方法



# moniItems.py



import sys, time



import inspect



class mon:



def __init__(self, n):



self.name = n



self.data = dict()



def run(self):



print ‘hello’, self.name



return self.runAllGet()



def getDisk(self):



return 222



def getCpu(self):



return 111



def runAllGet(self):



for fun in inspect.getmembers(self, predicate=inspect.ismethod):



print fun[0], fun[1]



if fun[0][:3] == ‘get’:



self.data[fun[0][3:]] = fun[1]()



print self.data



return self.data






# 模块导入使用



from moniItems import mon



m = mon()



m.runAllGet()



文件处理



# 模式: 读’r’  写[清空整个文件]’w’ 追加[文件需要存在]’a’ 读写’r+’ 二进制文件’b’  ‘rb’,’wb’,’rb+’



写文件



i={‘ddd’:’ccc’}



f = file(‘poem.txt’, ‘a’)



f.write(“string”)



f.write(str(i))



f.flush()



f.close()



读文件



f = file(‘/etc/passwd’,’r’)



c = f.read().strip()        # 读取为一个大字符串,并去掉最后一个换行符



for i in c.spilt(‘\n’):     # 用换行符切割字符串得到列表循环每行



print i



f.close()



读文件1



f = file(‘/etc/passwd’,’r’)



while True:



line = f.readline()    # 返回一行



if len(line) == 0:



break



x = line.split(“:”)                  # 冒号分割定义序列



#x = [ x for x in line.split(“:”) ]  # 冒号分割定义序列



#x = [ x.split(“/”) for x in line.split(“:”) ]  # 先冒号分割,在/分割 打印x[6][1]



print x[6],”\n”,



f.close()






读文件2



f = file(‘/etc/passwd’)



c = f.readlines()       # 读入所有文件内容,可反复读取,大文件时占用内存较大



for line in c:



print line.rstrip(),



f.close()



读文件3



for i in open(‘b.txt’):   # 直接读取也可迭代,并有利于大文件读取,但不可反复读取



print i,






追加日志



log = open(‘/home/peterli/xuesong’,’a’)



print >> log,’faaa’



log.close()






with读文件



with open(‘a.txt’) as f:



for i in f:



print i



print f.read()        # 打印所有内容为字符串



print f.readlines()   # 打印所有内容按行分割的列表






csv读配置文件



192.168.1.5,web # 配置文件按逗号分割



list = csv.reader(file(‘a.txt’))



for line in list:



print line              #  [‘192.168.1.5’, ‘web’]



内建函数



dir(sys)            # 显示对象的属性



help(sys)           # 交互式帮助



int(obj)            # 转型为整形



str(obj)            # 转为字符串



len(obj)            # 返回对象或序列长度



open(file,mode)     # 打开文件 #mode (r 读,w 写, a追加)



range(0,3)          # 返回一个整形列表



raw_input(“str:”)   # 等待用户输入



type(obj)           # 返回对象类型



abs(-22)            # 绝对值



random              # 随机数



choice()            # 随机返回给定序列的一个元素



divmod(x,y)         # 函数完成除法运算,返回商和余数。



round(x[,n])        # 函数返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数



strip()             # 是去掉字符串两端多于空格,该句是去除序列中的所有字串两端多余的空格



del                 # 删除列表里面的数据



cmp(x,y)            # 比较两个对象    #根据比较结果返回一个整数,如果x<y,则返回-1;如果x>y,则返回1,如果x==y则返回0



max()               # 字符串中最大的字符



min()               # 字符串中最小的字符



sorted()            # 对序列排序



reversed()          # 对序列倒序



enumerate()         # 返回索引位置和对应的值



sum()               # 总和



list()              # 变成列表可用于迭代



eval(‘3+4’)         # 将字符串当表达式求值 得到7



exec ‘a=100’        # 将字符串按python语句执行



exec(a+’=new’)      # 将变量a的值作为新的变量



tuple()             # 变成元组可用于迭代   #一旦初始化便不能更改的数据结构,速度比list快



zip(s,t)            # 返回一个合并后的列表  s = [’11’,’22’]  t = [‘aa’,’bb’]  [(’11’, ‘aa’), (’22’, ‘bb’)]



isinstance(object,int)    # 测试对象类型 int



xrange([lower,]stop[,step])            # 函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象



字符串相关模块



string         # 字符串操作相关函数和工具



re             # 正则表达式



struct         # 字符串和二进制之间的转换



c/StringIO     # 字符串缓冲对象,操作方法类似于file对象



base64         # Base16\32\64数据编解码



codecs         # 解码器注册和基类



crypt          # 进行单方面加密



difflib        # 找出序列间的不同



hashlib        # 多种不同安全哈希算法和信息摘要算法的API



hma            # HMAC信息鉴权算法的python实现



md5            # RSA的MD5信息摘要鉴权



rotor          # 提供多平台的加解密服务



sha            # NIAT的安全哈希算法SHA



stringprep     # 提供用于IP协议的Unicode字符串



textwrap       # 文本包装和填充



unicodedate    # unicode数据库



列表类型内建函数



list.append(obj)                 # 向列表中添加一个对象obj



list.count(obj)                  # 返回一个对象obj在列表中出现的次数



list.extend(seq)                 # 把序列seq的内容添加到列表中



list.index(obj,i=0,j=len(list))  # 返回list[k] == obj 的k值,并且k的范围在i<=k<j;否则异常



list.insert(index.obj)           # 在索引量为index的位置插入对象obj



list.pop(index=-1)               # 删除并返回指定位置的对象,默认是最后一个对象



list.remove(obj)                 # 从列表中删除对象obj



list.reverse()                   # 原地翻转列表



list.sort(func=None,key=None,reverse=False)  # 以指定的方式排序列表中成员,如果func和key参数指定,则按照指定的方式比较各个元素,如果reverse标志被置为True,则列表以反序排列



序列类型操作符



seq[ind]              # 获取下标为ind的元素



seq[ind1:ind2]        # 获得下标从ind1到ind2的元素集合



seq * expr            # 序列重复expr次



seq1 + seq2           # 连接seq1和seq2



obj in seq            # 判断obj元素是否包含在seq中



obj not in seq        # 判断obj元素是否不包含在seq中



字符串类型内建方法



string.expandtabs(tabsize=8)                  # tab符号转为空格 #默认8个空格



string.endswith(obj,beg=0,end=len(staring))   # 检测字符串是否已obj结束,如果是返回True #如果beg或end指定检测范围是否已obj结束



string.count(str,beg=0,end=len(string))       # 检测str在string里出现次数  f.count(‘\n’,0,len(f)) 判断文件行数



string.find(str,beg=0,end=len(string))        # 检测str是否包含在string中



string.index(str,beg=0,end=len(string))       # 检测str不在string中,会报异常



string.isalnum()                              # 如果string至少有一个字符并且所有字符都是字母或数字则返回True



string.isalpha()                              # 如果string至少有一个字符并且所有字符都是字母则返回True



string.isnumeric()                            # 如果string只包含数字字符,则返回True



string.isspace()                              # 如果string包含空格则返回True



string.isupper()                              # 字符串都是大写返回True



string.islower()                              # 字符串都是小写返回True



string.lower()                                # 转换字符串中所有大写为小写



string.upper()                                # 转换字符串中所有小写为大写



string.lstrip()                               # 去掉string左边的空格



string.rstrip()                               # 去掉string字符末尾的空格



string.replace(str1,str2,num=string.count(str1))  # 把string中的str1替换成str2,如果num指定,则替换不超过num次



string.startswith(obj,beg=0,end=len(string))  # 检测字符串是否以obj开头



string.zfill(width)                           # 返回字符长度为width的字符,原字符串右对齐,前面填充0



string.isdigit()                              # 只包含数字返回True



string.split(“分隔符”)                        # 把string切片成一个列表



“:”.join(string.split())                      # 以:作为分隔符,将所有元素合并为一个新的字符串



序列类型相关的模块



array         # 一种受限制的可变序列类型,元素必须相同类型



copy          # 提供浅拷贝和深拷贝的能力



operator      # 包含函数调用形式的序列操作符 operator.concat(m,n)



re            # perl风格的正则表达式查找



StringIO      # 把长字符串作为文件来操作 如: read() \ seek()



cStringIO     # 把长字符串作为文件来操,作速度更快,但不能被继承



textwrap      # 用作包装/填充文本的函数,也有一个类



types         # 包含python支持的所有类型



collections   # 高性能容器数据类型



字典内建方法



dict.clear()                            # 删除字典中所有元素



dict copy()                             # 返回字典(浅复制)的一个副本



dict.fromkeys(seq,val=None)             # 创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对的初始值



dict.get(key,default=None)              # 对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,则返回default值



dict.has_key(key)                       # 如果键在字典中存在,则返回True 用in和not in代替



dicr.items()                            # 返回一个包含字典中键、值对元组的列表



dict.keys()                             # 返回一个包含字典中键的列表



dict.iter()                             # 方法iteritems()、iterkeys()、itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表



dict.pop(key[,default])                 # 和方法get()相似.如果字典中key键存在,删除并返回dict[key]



dict.setdefault(key,default=None)       # 和set()相似,但如果字典中不存在key键,由dict[key]=default为它赋值



dict.update(dict2)                      # 将字典dict2的键值对添加到字典dict



dict.values()                           # 返回一个包含字典中所有值得列表



dict([container])     # 创建字典的工厂函数。提供容器类(container),就用其中的条目填充字典



len(mapping)          # 返回映射的长度(键-值对的个数)



hash(obj)             # 返回obj哈希值,判断某个对象是否可做一个字典的键值








集合方法



s.update(t)                         # 用t中的元素修改s,s现在包含s或t的成员   s |= t



s.intersection_update(t)            # s中的成员是共用属于s和t的元素          s &= t



s.difference_update(t)              # s中的成员是属于s但不包含在t中的元素    s -= t



s.symmetric_difference_update(t)    # s中的成员更新为那些包含在s或t中,但不是s和t共有的元素  s ^= t



s.add(obj)                          # 在集合s中添加对象obj



s.remove(obj)                       # 从集合s中删除对象obj;如果obj不是集合s中的元素(obj not in s),将引发KeyError错误



s.discard(obj)                      # 如果obj是集合s中的元素,从集合s中删除对象obj



s.pop()                             # 删除集合s中的任意一个对象,并返回它



s.clear()                           # 删除集合s中的所有元素



s.issubset(t)                       # 如果s是t的子集,则返回True   s <= t



s.issuperset(t)                     # 如果t是s的超集,则返回True   s >= t



s.union(t)                          # 合并操作;返回一个新集合,该集合是s和t的并集   s | t



s.intersection(t)                   # 交集操作;返回一个新集合,该集合是s和t的交集   s & t



s.difference(t)                     # 返回一个新集合,改集合是s的成员,但不是t的成员  s – t



s.symmetric_difference(t)           # 返回一个新集合,该集合是s或t的成员,但不是s和t共有的成员   s ^ t



s.copy()                            # 返回一个新集合,它是集合s的浅复制



obj in s                            # 成员测试;obj是s中的元素 返回True



obj not in s                        # 非成员测试:obj不是s中元素 返回True



s == t                              # 等价测试 是否具有相同元素



s != t                              # 不等价测试



s < t                               # 子集测试;s!=t且s中所有元素都是t的成员



s > t                               # 超集测试;s!=t且t中所有元素都是s的成员



序列化



#!/usr/bin/python



import cPickle



obj = {‘1’:[‘4124′,’1241′,’124′],’2’:[‘12412′,’142′,’1241’]}



pkl_file = open(‘account.pkl’,’wb’)



cPickle.down(obj,pkl_file)



pkl_file.close()



pkl_file = open(‘account.pkl’,’rb’)



account_list = cPickle.load(pkl_file)



pkl_file.close()



文件对象方法






file.close()                     # 关闭文件



file.fileno()                    # 返回文件的描述符



file.flush()                     # 刷新文件的内部缓冲区



file.isatty()                    # 判断file是否是一个类tty设备



file.next()                      # 返回文件的下一行,或在没有其他行时引发StopIteration异常



file.read(size=-1)               # 从文件读取size个字节,当未给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回



file.readline(size=-1)           # 从文件中读取并返回一行(包括行结束符),或返回最大size个字符



file.readlines(sizhint=0)        # 读取文件的所有行作为一个列表返回



file.xreadlines()                # 用于迭代,可替换readlines()的一个更高效的方法



file.seek(off, whence=0)         # 在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off字节



file.tell()                      # 返回当前在文件中的位置



file.truncate(size=file.tell())  # 截取文件到最大size字节,默认为当前文件位置



file.write(str)                  # 向文件写入字符串



file.writelines(seq)             # 向文件写入字符串序列seq;seq应该是一个返回字符串的可迭代对象



文件对象的属性






file.closed          # 表示文件已被关闭,否则为False



file.encoding        # 文件所使用的编码  当unicode字符串被写入数据时,它将自动使用file.encoding转换为字节字符串;若file.encoding为None时使用系统默认编码



file.mode            # Access文件打开时使用的访问模式



file.name            # 文件名



file.newlines        # 未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束符的列表



file.softspace       # 为0表示在输出一数据后,要加上一个空格符,1表示不加



异常处理






# try 中使用 sys.exit(2) 会被捕获,无法退出脚本,可使用 os._exit(2) 退出脚本






class ShortInputException(Exception):  # 继承Exception异常的类,定义自己的异常



def __init__(self, length, atleast):



Exception.__init__(self)



self.length = length



self.atleast = atleast



try:



s = raw_input(‘Enter something –> ‘)



if len(s) < 3:



raise ShortInputException(len(s), 3)    # 触发异常



except EOFError:



print ‘\nWhy did you do an EOF on me?’



except ShortInputException, x:      # 捕捉指定错误信息



print ‘ShortInputException:  %d | %d’ % (x.length, x.atleast)



except Exception as err:            # 捕捉所有其它错误信息内容



print str(err)



#except urllib2.HTTPError as err:   # 捕捉外部导入模块的错误



#except:                            # 捕捉所有其它错误 不会看到错误内容



#


print ‘except’



finally:                            # 无论什么情况都会执行 关闭文件或断开连接等



print ‘finally’



else:                               # 无任何异常 无法和finally同用



print ‘No exception was raised.’



不可捕获的异常



NameError:              # 尝试访问一个未申明的变量



ZeroDivisionError:      # 除数为零



SyntaxErrot:            # 解释器语法错误



IndexError:             # 请求的索引元素超出序列范围



KeyError:               # 请求一个不存在的字典关键字



IOError:                # 输入/输出错误



AttributeError:         # 尝试访问未知的对象属性



ImportError             # 没有模块



IndentationError        # 语法缩进错误



KeyboardInterrupt       # ctrl+C



SyntaxError             # 代码语法错误



ValueError              # 值错误



TypeError               # 传入对象类型与要求不符合



内建异常






BaseException                # 所有异常的基类



SystemExit                   # python解释器请求退出



KeyboardInterrupt            # 用户中断执行



Exception                    # 常规错误的基类



StopIteration                # 迭代器没有更多的值



GeneratorExit                # 生成器发生异常来通知退出



StandardError                # 所有的内建标准异常的基类



ArithmeticError              # 所有数值计算错误的基类



FloatingPointError           # 浮点计算错误



OverflowError                # 数值运算超出最大限制



AssertionError               # 断言语句失败



AttributeError               # 对象没有这个属性



EOFError                     # 没有内建输入,到达EOF标记



EnvironmentError             # 操作系统错误的基类



IOError                      # 输入/输出操作失败



OSError                      # 操作系统错误



WindowsError                 # windows系统调用失败



ImportError                  # 导入模块/对象失败



KeyboardInterrupt            # 用户中断执行(通常是ctrl+c)



LookupError                  # 无效数据查询的基类



IndexError                   # 序列中没有此索引(index)



KeyError                     # 映射中没有这个键



MemoryError                  # 内存溢出错误(对于python解释器不是致命的)



NameError                    # 未声明/初始化对象(没有属性)



UnboundLocalError            # 访问未初始化的本地变量



ReferenceError               # 若引用试图访问已经垃圾回收了的对象



RuntimeError                 # 一般的运行时错误



NotImplementedError          # 尚未实现的方法



SyntaxError                  # python语法错误



IndentationError             # 缩进错误



TabError                     # tab和空格混用



SystemError                  # 一般的解释器系统错误



TypeError                    # 对类型无效的操作



ValueError                   # 传入无效的参数



UnicodeError                 # Unicode相关的错误



UnicodeDecodeError           # Unicode解码时的错误



UnicodeEncodeError           # Unicode编码时的错误



UnicodeTranslateError        # Unicode转换时错误



Warning                      # 警告的基类



DeprecationWarning           # 关于被弃用的特征的警告



FutureWarning                # 关于构造将来语义会有改变的警告



OverflowWarning              # 旧的关于自动提升为长整形的警告



PendingDeprecationWarning    # 关于特性将会被废弃的警告



RuntimeWarning               # 可疑的运行时行为的警告



SyntaxWarning                # 可疑的语法的警告



UserWarning                  # 用户代码生成的警告



触发异常



raise exclass            # 触发异常,从exclass生成一个实例(不含任何异常参数)



raise exclass()          # 触发异常,但现在不是类;通过函数调用操作符(function calloperator:”()”)作用于类名生成一个新的exclass实例,同样也没有异常参数



raise exclass, args      # 触发异常,但同时提供的异常参数args,可以是一个参数也可以是元组



raise exclass(args)      # 触发异常,同上



raise exclass, args, tb  # 触发异常,但提供一个跟踪记录(traceback)对象tb供使用



raise exclass,instance   # 通过实例触发异常(通常是exclass的实例)



raise instance           # 通过实例触发异常;异常类型是实例的类型:等价于raise instance.__class__, instance



raise string             # 触发字符串异常



raise string, srgs       # 触发字符串异常,但触发伴随着args



raise string,args,tb     # 触发字符串异常,但提供一个跟踪记录(traceback)对象tb供使用



raise                    # 重新触发前一个异常,如果之前没有异常,触发TypeError



跟踪异常栈



# traceback 获取异常相关数据都是通过sys.exc_info()函数得到的



import traceback



import sys



try:



s = raw_input()



print int(s)



except ValueError:



# sys.exc_info() 返回值是元组,第一个exc_type是异常的对象类型,exc_value是异常的值,exc_tb是一个traceback对象,对象中包含出错的行数、位置等数据



exc_type, exc_value, exc_tb = sys.exc_info()



print “\n%s \n %s \n %s\n” %(exc_type, exc_value, exc_tb )



traceback.print_exc()        # 打印栈跟踪信息






抓取全部错误信息存如字典



import sys, traceback



try:



s = raw_input()



int(s)



except:



exc_type, exc_value, exc_traceback = sys.exc_info()



traceback_details = {



‘filename’: exc_traceback.tb_frame.f_code.co_filename,



‘lineno’  : exc_traceback.tb_lineno,



‘name’    : exc_traceback.tb_frame.f_code.co_name,



‘type’    : exc_type.__name__,



‘message’ : exc_value.message,



}






del(exc_type, exc_value, exc_traceback)



print traceback_details



f = file(‘test1.txt’, ‘a’)



f.write(“%s %s %s %s %s\n” %(traceback_details[‘filename’],traceback_details[‘lineno’],traceback_details[‘name’],traceback_details[‘type’],traceback_details[‘message’], ))



f.flush()



f.close()



调试log



# cgitb覆盖了默认sys.excepthook全局异常拦截器



def func(a, b):



return a / b



if __name__ == ‘__main__’:



import cgitb



cgitb.enable(format=’text’)



func(1, 0)



函数式编程的内建函数



apply(func[,nkw][,kw])          # 用可选的参数来调用func,nkw为非关键字参数,kw为关键字参数;返回值是函数调用的返回值



filter(func,seq)                # 调用一个布尔函数func来迭代遍历每个seq中的元素;返回一个使func返回值为true的元素的序列



map(func,seq1[,seq2])           # 将函数func作用于给定序列(s)的每个元素,并用一个列表来提供返回值;如果func为None,func表现为一个身份函数,返回一个含有每个序列中元素集合的n个元组的列表



reduce(func,seq[,init])         # 将二元函数作用于seq序列的元素,每次携带一堆(先前的结果以及下一个序列元素),连续地将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素






# filter 即通过函数方法只保留结果为真的值组成列表



def f(x): return x % 2 != 0 and x % 3 != 0



f(3)     # 函数结果是False  3被filter抛弃



f(5)     # 函数结果是True   5被加入filter最后的列表结果



filter(f, range(2, 25))



[5, 7, 11, 13, 17, 19, 23]






# map 通过函数对列表进行处理得到新的列表



def cube(x): return x*x*x



map(cube, range(1, 11))



[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]






# reduce 通过函数会先接收初始值和序列的第一个元素,然后是返回值和下一个元素,依此类推



def add(x,y): return x+y



reduce(add, range(1, 11))      # 结果55  是1到10的和  x的值是上一次函数返回的结果,y是列表中循环的值



re正则



compile(pattern,flags=0)          # 对正则表达式模式pattern进行编译,flags是可选标识符,并返回一个regex对象



match(pattern,string,flags=0)     # 尝试用正则表达式模式pattern匹配字符串string,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None



search(pattern,string,flags=0)    # 在字符串string中搜索正则表达式模式pattern的第一次出现,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None



findall(pattern,string[,flags])   # 在字符串string中搜索正则表达式模式pattern的所有(非重复)出现:返回一个匹配对象的列表  # pattern=u’\u4e2d\u6587′ 代表UNICODE



finditer(pattern,string[,flags])  # 和findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象



split(pattern,string,max=0)       # 根据正则表达式pattern中的分隔符把字符string分割为一个列表,返回成功匹配的列表,最多分割max次(默认所有)



sub(pattern,repl,string,max=0)    # 把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值没有给出,则对所有匹配的地方进行替换(subn()会返回一个表示替换次数的数值)



group(num=0)                      # 返回全部匹配对象(或指定编号是num的子组)



groups()                          # 返回一个包含全部匹配的子组的元组(如果没匹配成功,返回一个空元组)






例子



re.findall(r’a[be]c’,’123abc456eaec789′)         # 返回匹配对象列表 [‘abc’, ‘aec’]



re.findall(“(.)12[34](..)”,a)                    # 取出匹配括号中内容   a=’qedqwe123dsf’



re.search(“(.)123”,a ).group(1)                  # 搜索匹配的取第1个标签



re.match(“^(1|2) *(.*) *abc$”, str).group(2)     # 取第二个标签



re.match(“^(1|2) *(.*) *abc$”, str).groups()     # 取所有标签



re.sub(‘[abc]’,’A’,’alex’)                       # 替换



for i in re.finditer(r’\d+’,s):                  # 迭代



print i.group(),i.span()                     #






搜索网页中UNICODE格式的中文



QueryAdd=’http://www.anti-spam.org.cn/Rbl/Query/Result’



Ip=’222.129.184.52′



s = requests.post(url=QueryAdd, data={‘IP’:Ip})



re.findall(u’\u4e2d\u56fd’, s.text, re.S)



编码转换



a=’中文’                    # 编码未定义按输入终端utf8或gbk



u=u’中文’                   # 定义为unicode编码  u值为 u’\u4e2d\u6587′



u.encode(‘utf8’)            # 转为utf8格式 u值为 ‘\xe4\xb8\xad\xe6\x96\x87’



print u                     # 结果显示 中文



print u.encode(‘utf8’)      # 转为utf8格式,当显示终端编码为utf8  结果显示 中文  编码不一致则乱码



print u.encode(‘gbk’)       # 当前终端为utf8 故乱码



ord(‘4’)                    # 字符转ASCII码



chr(52)                     # ASCII码转字符



遍历递归



[os.path.join(x[0],y) for x in os.walk(‘/root/python/5’) for y in x[2]]



for i in os.walk(‘/root/python/5/work/server’):



print i

2 常用模块



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



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.walk(‘/root/’)          # 递归路径






文件处理



mkfifo()/mknod()       # 创建命名管道/创建文件系统节点



remove()



版权声明:本文为picture1213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。