控制台操作
控制台不闪退
'pause')
获取控制台大小
'stty size', 'r'). read().split()
输入输出控制
解决输入提示中文乱码问题
'请输入文字', 'utf-8').encode( 'gbk'))
格式化输出
print
接受多行输入
""
while
">>")
if data.strip()== "stop":
break
"%s\n"
print
---------------------------
>>1
>>2
>>3
>>stop
1
2
3
同行输出
'%s'
'%s \r'
标准输入输出
"input") 标准输入
sys.stdout.flush() 刷新缓冲区
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。
颜色控制
控制台颜色控制(适用于windows)
WConio.textcolor(WConio.YELLOW)
print "yellow"
WConio.textcolor(WConio.BLUE)
print "blue"
输出颜色控制(全平台)
'\033[1;31m'
'\033[1;32m'
'\033[1;33m'
'\033[1;37m'
'\033[0m’
print red+"color is red"+reset
print green+"color is green"+reset
进度条控制
方案一
from __future__ import division
import sys,time
'#'
for i in
'#'
'% ||'+j+ '->'+ "\r")
sys.stdout.flush()
time.sleep(0.1)
方案二
import sys
import time
for i in
'#'+ '->'+ "\b\b")
sys.stdout.flush()
time.sleep(0.5)
方案三
from progressbar import *
import time
import os
'stty size', 'r'). read().split() #获取控制台size
console_width=int(columns)
total = 10
progress = ProgressBar()
test():
'' '
进度条函数,记录进度
''
for i in
test2()
def test2():
'' '
执行函数,输出结果
''
"nMask'Blog is http://thief.one"
"\r"+content+ " "*(console_width-len(content)))
time.sleep(1)
sys.stdout.flush()
test()
更多高级用法可以使用progressbar模块。
系统操作
系统信息
获取python安装路径
from distutils.sysconfig import get_python_lib
print
获取当前python版本
sys.version_info
sys.version
获取当前时间
c=time.ctime()
#自定义格式输出
ISOTIMEFORMAT=’%Y-%m-%d %X’
time.strftime( ISOTIMEFORMAT, time.localtime() )
查看系统环境变量
"PATH"]
获取系统磁盘
"wmic VOLUME GET Name")
获取当前路径(包括当前py文件名)
os.path.realpath(__file__)
当前平台使用的行终止符
os.linesep
获取终端大小
'stty size', 'r'). read().split()
#python3以后存在可以使用os
os.get_termial_size()
退出程序
- return:返回函数的值,并退出函数。
- exit():直接退出。
- sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。
- sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)
- os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序)
网络操作
域名解析为ip
'http')[0][4][0]
获取服务器版本信息
'http://www.163.com'
sock = urllib2.urlopen(sUrl)
sock.headers.values()
文件操作
open函数,使用wb、rb代替w、r
"test.txt", "wr") as w:
"test")
这种写法可以兼容python2/3。
输出一个目录下所有文件名称
def search(paths):
if os.path.isdir(paths): #如果是目录
#列出目录中所有的文件
for i in
#构造文件路径
#递归
elif os.path.isfile(paths): #如果是文件
print paths #输出文件名
文件查找
import glob
print glob.glob(r "E:/*.txt") #返回的是一个列表
查找文件只用到三个匹配符:”*”, “?”, “[]“
”*”匹配0个或多个字符;
”?”匹配单个字符;
”[]“匹配指定范围内的字符,如:[0-9]匹配数字。
查找指定名称的文件夹的路径
def search(paths,file_name,tag,lists):
if os.path.isdir(paths): #如果是目录
if file_name==tag: #如果目录名称为tag
#将该路径添加到列表中
else: #如果目录名称不为tag
try:
#列出目录中所有的文件
for file_name in
#构造文件路径
#递归
#遇到特殊目录名时会报错
pass
elif os.path.isfile(paths): #如果是文件
pass
return
数据操作
判断数据类型
"123",(int,long, float,complex)
字符串(string)
字符串推导
"True"
if a== "True" else "False"
print
True
format方法拼接字符串与变量
"{test} abc {test2}".format( test= "123",test2= "456")
print
123 abc 456
或者:
"{},{}".format(1,2)
print
1,2
去掉小数点后面的数字
a=1.21311
b=Int(math.floor(a))
字符串倒置
"codementor"
>>> a[::-1]
字符串首字母变大写
'ssfef'
print
print
返回一个字符串居中,并使用空格填充至长度width的新字符串。
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。
列举所有字母
print
print
print
列表(list)
列表去重
ids = [1,4,3,3,4,2,3,4,5,6,1]
set(ids))
判断列表为空
a=[]
if
列表运算
a=[1,2,3]
b=[3,4,5]
set(a)& set(b) 与
set(a)| set(b) 或
set(a)- set(b) 非
单列表元素相加
"Code", "mentor", "Python", "Developer"]
print " ".join(a)
Code mentor Python Developer
多列表元素分别相加
'a', 'b', 'c', 'd']
'p', 'q', 'r', 's']
for x, y in
print
ap
bq
cr
ds
将嵌套列表转换成单一列表
a = [[1, 2], [3, 4], [5, 6]]
>>> import itertools
>>> list(itertools.chain.from_iterable(a))
[1, 2, 3, 4, 5, 6]
列表内元素相加
a=[1,2,3](数字)
sum(a)
产生a-z的字符串列表
map(chr,range(97,123))
列表复制
a=[1,2,3]
b=a
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。
列表推导
if+else配合列表解析
if i >5 else -i for i in
多层嵌套列表
a=[[1,2],[3,4]]
for j in i for i in
print
[1,2,3,4]
生成一个生成器,调用next方法,可以减少内存开支。
else i+1 for i in b if
字典推导
更换key与value位置
"a":1, "b":2}
for key value in
字典操作(dict)
筛选出值重复的key
list1=self.dict_ip.items()
ddict=defaultdict(list)
for k,v in
ddict[v].append(k)
for i in ddict if
dict_ns=dict(list2)
字典排序(py2)
"a":1, "b":2, "c":3}
##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。
字典值判断
"a":1}
"a", "") #如果不存在a,则返回””
if a else 0 #如果存在a,则返回a,不然返回0
模块操作
导入模块时,设置只允许导入的属性或者方法。
fb.py:
-----------------------
"a", "b"]
"123"
"2345"
def b():
print
-----------------------
from fb import *
可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。
导入上级目录下的包
"..")
from spider.spider_ import spider_
导入外部目录下的模块
需要在目标目录下创建__init__.py文件,内容随便。
增加模块属性
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。
a.py:
#! -*- coding:utf-8 -*-
"nMask"
然后当我们导入a这个模块的时候,可以输出dir(a)看看
>>> import p
print
'__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
print
nmask
动态加载一个目录下的所有模块
目录:
test
----a.py
----b.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 path+". "+i+"
exec import_string #执行字符串中的内容
函数操作
eval/exec
test(content):
print
exec(“ test(‘abc ')”)
输出:abc
说明:exec函数没有返回值
test(content):
return
print eval(“ test(‘abc ')”)
输出:abc
说明:eval函数有返回值
装饰器函数
输出当前时间装饰器
def current_time(aclass):
def wrapper():
print "[Info]NowTimeis:",time.ctime()
return
return
itertools迭代器
"a", "b", "c", "d"],repeat=2)
----
"a", "a"),( "b", "b")......]
reduce函数
函数本次执行的结果传递给下一次。
test(a,b):
return
test,range(10))
结果:从0+1+2......+9
enumerate函数
输入列表元素以及序列号
"a", "b", "c"]
for i,m in
print(i,m)
函数超时时间设置
@于2017.05.27更新
利用signal设置某个函数执行的超时时间
import time
import signal
test(i):
#模拟超时的情况
print "%d within time"%(i)
return
def fuc_time(time_out):
# 此为函数超时控制,替换下面的test函数为可能出现未知错误死锁的函数
def handler(signum, frame):
raise AssertionError
try:
signal.signal(signal.SIGALRM, handler)
#time_out为超时时间
test(1) #函数设置部分,如果未超时则正常返回数据,
return
except AssertionError:
print "%d timeout"%(i) # 超时则报错
if __name__ == '__main__':
for i in
fuc_time(1)
函数出错重试
利用retrying模块实现函数报错重试功能
import random
from retrying import retry
@retry
def have_a_try():
if
'It's not 5! ')
's 5!'
如果我们运行have_a_try函数,那么直到random.randint返回5,它才会执行结束,否则会一直重新执行,关于该模块更多的用法请自行搜索。
程序操作
@于2017.05.27更新
Ctrl+C退出程序
利用signal实现ctrl+c退出程序。
import signal
import sys
import time
def handler(signal_num,frame):
print "\nYou Pressed Ctrl-C."
sys.exit(signal_num)
signal.signal(signal.SIGINT, handler)
# 正常情况可以开始你自己的程序了。
# 这里为了演示,我们做一个不会卡死机器的循环。
while
time.sleep(10)
# 当你按下Ctrl-C的时候,应该会输出一段话,并退出.
程序自重启
利用os.execl方法实现程序自重启
import time
import sys
import os
def restart_program():
python = sys.executable
print "info:",os.execl(python, python, * sys.argv)
#os.execl方法会代替自身进程,以达到自重启的目的。
if __name__ == "__main__":
print 'start...'
print u "3秒后,程序将结束...".encode( "utf8")
time.sleep(3)
restart_program()