本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。
控制台操作 控制台不闪退
获取控制台大小
1 2 rows, columns = os.popen('stty size' , 'r' ).read().split() 
输入输出控制 解决输入提示中文乱码问题
1 raw_input(unicode('请输入文字' ,'utf-8' ).encode('gbk' )) 
格式化输出
接受多行输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 text=""  while  1 :    data=raw_input(">>" )     if  data.strip()=="stop" :         break      text+="%s\n"  % data print  text--------------------------- >>1  >>2  >>3  >>stop 1 2 3 
同时输出
1 2 Print '%s'  % a, Print '%s \r'  % a 
标准输入输出
1 2 sys.stdout.write("input" ) 标准输入 sys.stdout.flush() 刷新缓冲区 
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。
颜色控制 控制台颜色控制(适用于windows)
1 2 3 4 WConio.textcolor(WConio.YELLOW) print  "yellow" WConio.textcolor(WConio.BLUE) print  "blue" 
输出颜色控制(全平台)
1 2 3 4 5 6 7 red = '\033[1;31m'  green = '\033[1;32m'  yellow = '\033[1;33m'  white = '\033[1;37m'  reset = '\033[0m’  print red+"color is red"+reset print green+"color is green"+reset 
进度条控制 方案一
1 2 3 4 5 6 7 8 from  __future__ import  divisionimport  sys,timej = '#'  for  i in  range (1 ,61 ):    j += '#'      sys.stdout.write(str (int ((i/60 )*100 ))+'%  ||' +j+'->' +"\r" )     sys.stdout.flush()     time.sleep(0.1 ) 
方案二
1 2 3 4 5 6 import  sysimport  timefor  i in  range (1 ,61 ):    sys.stdout.write('#' +'->' +"\b\b" )     sys.stdout.flush()     time.sleep(0.5 ) 
方案三
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from  progressbar import  *import  timeimport  osrows, columns = os.popen('stty size' , 'r' ).read().split()  console_width=int (columns) total = 10  progress = ProgressBar() def  test ():    '''      进度条函数,记录进度     '''     for  i in  progress(range (total)):         test2() def  test2 ():    '''      执行函数,输出结果     '''     content="nMask'Blog is http://thief.one"      sys.stdout.write("\r" +content+" " *(console_width-len (content)))     time.sleep(1 )     sys.stdout.flush() test() 
更多高级用法可以使用progressbar模块。
系统操作 系统信息 获取python安装路径
1 2 from  distutils.sysconfig import  get_python_libprint  get_python_lib
获取当前时间
1 2 3 4 5 6 7 c=time.ctime() ISOTIMEFORMAT='%Y-%m-%d %X'  time.strftime( ISOTIMEFORMAT, time.localtime() ) now=time.strftime('%Y-%m-%d %X' , time.localtime()) 
查看系统环境变量
获取系统磁盘
1 os.popen("wmic VOLUME GET Name" ) 
获取当前路径(包括当前py文件名)
1 os.path.realpath(__file__) 
当前平台使用的行终止符
获取终端大小
1 2 3 rows, columns = os.popen('stty size' , 'r' ).read().split() os.get_termial_size() 
退出程序 1 2 3 4 5 return :返回函数的值,并退出函数。exit():直接退出。 sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。 sys.exit(0 ):为正常退出,其他(1 -127 )为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序) os._exit(0 ): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序) 
网络操作 域名解析为ip
1 ip= socket.getaddrinfo(domain,'http' )[0 ][4 ][0 ] 
获取服务器版本信息
1 2 3 sUrl = 'http://www.163.com'  sock = urllib2.urlopen(sUrl) sock.headers.values() 
文件操作 输出一个目录下所有文件名称
1 2 3 4 5 6 7 8 def  search (paths ):    if  os.path.isdir(paths):             files=os.listdir(paths)             for  i in  files:                i=os.path.join(paths,i)                  search(i)                      elif  os.path.isfile(paths):                 print  paths    
文件查找
1 2 3 4 5 6 import  globprint  glob.glob(r"E:/*.txt" )     查找文件只用到三个匹配符:”*”, “?”, “[]“ ”*”匹配0 个或多个字符; ”?”匹配单个字符; ”[]“匹配指定范围内的字符,如:[0 -9 ]匹配数字。 
查找指定名称的文件夹的路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def  search (paths,file_name,tag,lists ):    if  os.path.isdir(paths):           if  file_name==tag:                 lists.append(paths)          else :                              try :                 files_list=os.listdir(paths)                   for  file_name in  files_list:                     path_new=os.path.join(paths,file_name)                       search(path_new,file_name,tag,lists)                 except :                  pass      elif  os.path.isfile(paths):          pass      return  lists 
数据操作 判断数据类型
1 isinstance ("123" ,(int ,long,float ,complex )
字符串(string) 去掉小数点后面的数字
1 2 a=1.21311  b=Int(math.floor(a)) 
字符串倒置
1 2 >>>  a =  "codementor" >>>  a[::-1 ]
字符串首字母变大写
1 2 3 info = 'ssfef'  print  info.capitalize()print  info.title()
返回一个字符串居中,并使用空格填充至长度width的新字符串。
1 "center string" .center(width) 
列举所有字母
1 2 3 print  string.ascii_uppercase 所有大写字母print  string. ascii_lowercase 所有小写字母print  string.ascii_letters 所有字母(包括大小写)
列表(list) 列表去重
1 2 ids = [1 ,4 ,3 ,3 ,4 ,2 ,3 ,4 ,5 ,6 ,1 ] ids = list (set (ids)) 
列表运算
1 2 3 4 5 a=[1 ,2 ,3 ] b=[3 ,4 ,5 ] set (a)&set (b) 与set (a)|set (b) 或set (a)-set (b) 非
单列表元素相加
1 2 3 a = ["Code" , "mentor" , "Python" , "Developer" ] >>>  print  " " .join(a)Code mentor Python Developer 
多列表元素分别相加
1 2 3 4 5 6 7 8 list1 = ['a' , 'b' , 'c' , 'd' ] list2 = ['p' , 'q' , 'r' , 's' ] >>>  for  x, y in  zip (list1,list2):          print  x, y ap bq cr ds 
将嵌套列表转换成单一列表
1 2 3 4 a = [[1 , 2 ], [3 , 4 ], [5 , 6 ]] >>>  import  itertools>>>  list (itertools.chain.from_iterable(a))[1 , 2 , 3 , 4 , 5 , 6 ] 
列表内元素相加
产生a-z的字符串列表
列表复制
1 2 3 4 a=[1 ,2 ,3 ] b=a 当对b进行操作时,会影响a的内容,因为共用一个内存指针, b=a[:] 这样就是单独复制一份了。 
##列表解析##
if+else配合列表解析
1 [i if  i >5  else  -i for  i in  range (10 )] 
字典操作(dict) 筛选出值重复的key
1 2 3 4 5 6 list1=self.dict_ip.items()                      ddict=defaultdict(list )         for  k,v in  list1:             ddict[v].append(k)         list2=[(i,ddict[i]) for  i in  ddict if  len (ddict[i])>1 ]         dict_ns=dict (list2) 
字典排序(py2)
1 2 3 file_dict={"a" :1 ,"b" :2 ,"c" :3 } file_dict_new=sorted (file_dict.iteritems(), key=operator.itemgetter(1 ),reverse=True )  
模块操作 导入模块时,设置只允许导入的属性或者方法。
1 2 3 4 5 6 7 8 9 10 11 fb.py: ----------------------- __all__=["a" ,"b" ] a="123"  c="2345"  def  b ():    print  “123 ” ----------------------- from  fb import  *可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。 
导入上级目录下的包
1 2 sys.path.append(".." ) from  spider.spider_ import  spider_
导入外部目录下的模块
1 需要在目标目录下创建__init__.py文件,内容随便。 
增加模块属性
1 2 3 4 有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。 a.py: __author__="nMask"  
然后当我们导入a这个模块的时候,可以输出dir(a)看看
1 2 3 4 5 >>>  import  p>>>  print  dir (p)['__author__' , '__builtins__' , '__doc__' , '__file__' , '__name__' , '__package__' ] >>>  print  p.__author__nmask 
动态加载一个目录下的所有模块
1 2 3 4 5 6 7 8 9 10 11 目录: ---test    ----a.py    ----b.py ---c.py c.py导入test下面的所有模块: for  path in  ["test" ]:    for  i in  list (set ([os.path.splitext(i)[0 ] for  i in  os.listdir("./" +path)])):         if  i!="__init__"  and  i!=".DS_Store" :              import_string = "import path+" ."+i+"              exec  import_string  
函数操作 装饰器函数 输出当前时间装饰器
1 2 3 4 5 def  current_time (aclass ):    def  wrapper ():         print  "[Info]NowTimeis:" ,time.ctime()         return  aclass()     return  wrapper 
1 2 3 p=product(["a" ,"b" ,"c" ,"d" ],repeat=2 ) ---- [("a" ,"a" ),("b" ,"b" )......] 
reduce函数 函数本次执行的结果传递给下一次。
1 2 3 4 def  test (a,b ):    return  a+b reduce(test,range (10 )) 结果:从0 +1 +2. .....+9  
QQ群:397745473