![]() 本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。 本文将会持续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。 控制台操作控制台不闪退 os.system('pause')获取控制台大小 rows, columns = os.popen('stty size', 'r').read().split()输入输出控制解决输入提示中文乱码问题 raw_input(unicode('请输入文字','utf-8').encode('gbk'))格式化输出 print a.prettify()接受多行输入 text=""
while 1:
data=raw_input(">>")
if data.strip()=="stop":
break
text+="%s\n" % data
print text
---------------------------
>>1
>>2
>>3
>>stop
1
2
3同行输出 Print '%s' % a,
Print '%s \r' % a标准输入输出 sys.stdout.write("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"输出颜色控制(全平台) 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进度条控制方案一 from __future__ import division
import sys,time
j = '#'
for i in range(1,61):
j += '#'
sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")
sys.stdout.flush()
time.sleep(0.1)方案二 import sys
import time
for i in range(1,61):
sys.stdout.write('#'+'->'+"\b\b")
sys.stdout.flush()
time.sleep(0.5)方案三 from progressbar import *
import time
import os
rows, columns = os.popen('stty size', 'r').read().split() #获取控制台size
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安装路径 from distutils.sysconfig import get_python_lib
print get_python_lib获取当前python版本 sys.version_info
sys.version获取当前时间 c=time.ctime()
#自定义格式输出
ISOTIMEFORMAT=’%Y-%m-%d %X’
time.strftime( ISOTIMEFORMAT, time.localtime() )查看系统环境变量 os.environ["PATH"]获取系统磁盘 os.popen("wmic VOLUME GET Name")获取当前路径(包括当前py文件名) os.path.realpath(__file__)当前平台使用的行终止符 os.linesep获取终端大小 rows, columns = os.popen('stty size', 'r').read().split()
#python3以后存在可以使用os
os.get_termial_size()退出程序
网络操作域名解析为ip ip= socket.getaddrinfo(domain,'http')[0][4][0]获取服务器版本信息 sUrl = 'http://www.163.com' sock = urllib2.urlopen(sUrl) sock.headers.values() 文件操作open函数,使用wb、rb代替w、r with open("test.txt","wr") as w:
w.write("test")这种写法可以兼容python2/3。 输出一个目录下所有文件名称 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 #输出文件名文件查找 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
lists.append(paths) #将该路径添加到列表中
else: #如果目录名称不为tag
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数据操作判断数据类型 isinstance("123",(int,long,float,complex)字符串(string)字符串推导 a="True"
b=a if a=="True" else "False"
>>>print b
Trueformat方法拼接字符串与变量 a="{test} abc {test2}".format(test="123",test2="456")
>>>>print a
123 abc 456
或者:
a="{},{}".format(1,2)
>>>>>print a
1,2去掉小数点后面的数字 a=1.21311
b=Int(math.floor(a))字符串倒置 >>> a = "codementor"
>>> a[::-1]字符串首字母变大写 info = 'ssfef'
print info.capitalize()
print info.title()返回一个字符串居中,并使用空格填充至长度width的新字符串。 "center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。列举所有字母 print string.ascii_uppercase 所有大写字母
print string. ascii_lowercase 所有小写字母
print string.ascii_letters 所有字母(包括大小写)列表(list)列表去重 ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))判断列表为空 a=[]
if not a:列表运算 a=[1,2,3]
b=[3,4,5]
set(a)&set(b) 与
set(a)|set(b) 或
set(a)-set(b) 非单列表元素相加 a = ["Code", "mentor", "Python", "Developer"]
>>> print " ".join(a)
Code mentor Python Developer多列表元素分别相加 list1 = ['a', 'b', 'c', 'd']
list2 = ['p', 'q', 'r', 's']
>>> for x, y in zip(list1,list2):
print x, y
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配合列表解析 [i if i >5 else -i for i in range(10)]多层嵌套列表 a=[[1,2],[3,4]]
b=[for j in i for i in a]
print b
[1,2,3,4]生成一个生成器,调用next方法,可以减少内存开支。 a=(i else i+1 for i in b if i==1)声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除 |