`

python高级写法

阅读更多

       

控制台操作

控制台不闪退

1
os.system('pause')

 

获取控制台大小

1
rows, columns = os.popen('stty size', 'r').read().split()

 

输入输出控制

解决输入提示中文乱码问题

1
raw_input(unicode('请输入文字','utf-8').encode('gbk'))

 

格式化输出

1
print a.prettify()

 

接受多行输入

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
8
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 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)

 

方案二

1
2
3
4
5
6
import sys
import time
for 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
23
24
25
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安装路径

1
2
from distutils.sysconfig import get_python_lib
print get_python_lib

 

获取当前python版本

1
2
sys.version_info
sys.version

 

获取当前时间

1
2
3
4
c=time.ctime()
#自定义格式输出
ISOTIMEFORMAT=’%Y-%m-%d %X’
time.strftime( ISOTIMEFORMAT, time.localtime() )

 

查看系统环境变量

1
os.environ["PATH"]

 

获取系统磁盘

1
os.popen("wmic VOLUME GET Name")

 

获取当前路径(包括当前py文件名)

1
os.path.realpath(__file__)

 

当前平台使用的行终止符

1
os.linesep

 

获取终端大小

1
2
3
rows, columns = os.popen('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

1
ip= socket.getaddrinfo(domain,'http')[0][4][0]

 

获取服务器版本信息

1
2
3
sUrl = 'http://www.163.com'
sock = urllib2.urlopen(sUrl)
sock.headers.values()

 

文件操作

open函数,使用wb、rb代替w、r

1
2
with open("test.txt","wr") as w:
w.write("test")

 

这种写法可以兼容python2/3。
输出一个目录下所有文件名称

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 glob
print glob.glob(r"E:/*.txt") #返回的是一个列表
查找文件只用到三个匹配符:”*”, “?”, “[]“
”*”匹配0个或多个字符;
”?”匹配单个字符;
”[]“匹配指定范围内的字符,如:[0-9]匹配数字。

 

查找指定名称的文件夹的路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

 

数据操作

判断数据类型

1
isinstance("123",(int,long,float,complex)

 

字符串(string)

字符串推导

1
2
3
4
a="True"
b=a if a=="True" else "False"
>>>print b
True

 

format方法拼接字符串与变量

1
2
3
4
5
6
7
a="{test} abc {test2}".format(test="123",test2="456")
>>>>print a
123 abc 456
或者:
a="{},{}".format(1,2)
>>>>>print a
1,2

 

去掉小数点后面的数字

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) #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
a=[]
if not a:

 

列表运算

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]

 

列表内元素相加

1
2
a=[1,2,3](数字)
sum(a)

 

产生a-z的字符串列表

1
map(chr,range(97,123))

 

列表复制

1
2
3
a=[1,2,3]
b=a
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。

 

列表推导

if+else配合列表解析

1
[i if i >5 else -i for i in range(10)]

 

多层嵌套列表

1
2
3
4
a=[[1,2],[3,4]]
b=[for j in i for i in a]
print b
[1,2,3,4]

 

生成一个生成器,调用next方法,可以减少内存开支。

1
a=(i else i+1 for i in b if i==1)

 

字典推导

更换key与value位置

1
2
dict={"a":1,"b":2}
b={value:key for key value in dict.items()}

 

字典操作(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
file_dict={"a":1,"b":2,"c":3}
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。

 

字典值判断

1
2
3
b={"a":1}
a=b.get("a","") #如果不存在a,则返回””
c=a if a else 0 #如果存在a,则返回a,不然返回0

 

模块操作

导入模块时,设置只允许导入的属性或者方法。

1
2
3
4
5
6
7
8
9
10
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:
#! -*- coding:utf-8 -*-
__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 #执行字符串中的内容

 

函数操作

eval/exec

1
2
3
4
def test(content):
print content
 
exec(“test(‘abc')”)

输出:abc
说明:exec函数没有返回值

1
2
3
4
def test(content):
return content
 
print eval(“test(‘abc')”)

 

输出:abc
说明:eval函数有返回值

装饰器函数

输出当前时间装饰器

1
2
3
4
5
def current_time(aclass):
def wrapper():
print "[Info]NowTimeis:",time.ctime()
return aclass()
return wrapper

 

itertools迭代器

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

 

enumerate函数

输入列表元素以及序列号

1
2
3
n=["a","b","c"]
for i,m in enumerate(n):
print(i,m)

 

函数超时时间设置

@于2017.05.27更新
利用signal设置某个函数执行的超时时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import time
import signal
 
def test(i):
time.sleep(0.999)#模拟超时的情况
print "%d within time"%(i)
return i
 
def fuc_time(time_out):
# 此为函数超时控制,替换下面的test函数为可能出现未知错误死锁的函数
def handler(signum, frame):
raise AssertionError
try:
signal.signal(signal.SIGALRM, handler)
signal.alarm(time_out)#time_out为超时时间
temp = test(1) #函数设置部分,如果未超时则正常返回数据,
return temp
except AssertionError:
print "%d timeout"%(i)# 超时则报错
 
if __name__ == '__main__':
for i in range(1,10):
fuc_time(1)

 

函数出错重试

利用retrying模块实现函数报错重试功能

1
2
3
4
5
6
7
8
import random
from retrying import retry
 
@retry
def have_a_try():
if random.randint(0, 10) != 5:
raise Exception('It's not 5!')
print 'It's 5!'

 

如果我们运行have_a_try函数,那么直到random.randint返回5,它才会执行结束,否则会一直重新执行,关于该模块更多的用法请自行搜索。

程序操作

@于2017.05.27更新

Ctrl+C退出程序

利用signal实现ctrl+c退出程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 1:
time.sleep(10)
# 当你按下Ctrl-C的时候,应该会输出一段话,并退出.

 

程序自重启

利用os.execl方法实现程序自重启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()
分享到:
评论

相关推荐

    python高级用法详解

    Python是一种强大而灵活的编程语言,其高级用法极大地扩展了它的功能和效率。本篇将深入探讨Python的高阶函数、作用域等关键概念,帮助开发者更好地掌握Python的精髓。 **一、高阶函数** 高阶函数是接受一个或多个...

    python入门教程、python开发实战、python网络爬虫写法三部曲

    Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而备受青睐,尤其适合初学者入门。"Python入门教程"是学习Python的第一步,它通常涵盖基础语法、数据类型(如整型、浮点型、字符串、列表、...

    简明python教程python核心编程第三版

    列表推导式和字典推导式是Python中的高效写法,能够简化数据结构的创建。Python的异常处理机制允许程序员优雅地处理错误,而模块和包的使用则能帮助组织和重用代码。 对于Python的面向对象编程,了解类、对象、继承...

    【Python实战应用案例代码】-从def到class再到scrapy函数和类写法对比.zip

    本案例通过对比`def`、`class`以及Scrapy框架中的函数和类写法,展示了不同编程结构在实际应用中的差异和优势。以下是对这些知识点的详细解释: 1. **函数(Function)**: - 函数是Python中可重用的代码块,通过`...

    Python基础教程:条件语句的七种写法.pdf

    这些技巧在个人项目中可能会显得很酷,但团队协作时应谨慎使用,因为它们可能会增加代码的理解难度,尤其是对于新手或者不熟悉这些高级特性的开发者来说。简洁清晰的代码更有利于团队间的协作和维护。在实际开发中,...

    试卷python真题练习.doc

    14. **Python语言分类**:Python是一种高级语言,非自然语言、汇编语言或机器语言。 15. **序列拼接**:错误的序列拼接是 `set = { 1, 2, 3 } + { 4, 5, 6 }`,因为集合的拼接不会合并元素,而是创建新的集合。 16...

    python进阶中文版

    这本书内容广泛,涵盖了多个Python编程的高级主题,例如函数参数的高级用法、调试、生成器、Map、Filter与Reduce操作、数据结构、装饰器、异常处理、lambda表达式、上下文管理器等。 1. args和kwargs用法 在Python...

    python-我的名字叫python

    python基础入门资料,一共40页,适合零编程基础(知识点学习)和有编程基础者(知识点复习),内容包括python语法基本写法,变量,列表,函数,类,高级功能(切片,lamda等); 学习时长:零基础(累计5小时),有基础(累计2小时)

    Python列表生成器的循环技巧分享

    Python列表生成器是一种高效、简洁的方式来创建列表,尤其在处理大量数据时,它能显著减少内存占用并提高代码可读性。列表生成器基于迭代器原理,通过在一行代码中包含一个或多个循环以及可选的条件判断,可以快速...

    资料Python完全新手教程复习知识点试卷试题.doc

    Python是一种广泛使用的高级编程语言,以其易读性强、面向对象和开源的特点深受程序员喜爱。对于初学者来说,掌握Python的基础知识至关重要。以下是一些在Python完全新手教程中可能遇到的关键概念和知识点: 1. ...

    python_3.8_jb51.zip

    Python作为一个高级编程语言,以其简洁的语法和强大的功能深受开发者喜爱,尤其适合初学者入门。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。 Python 3.8的亮点之一是引入了赋值表达式(walrus...

    Python 2.5

    它具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的...

    python考试题目.docx

    Python是一种广泛使用的高级编程语言,尤其在教育和考试中,它是初学者和专业人士的重要学习对象。以下是基于给定的Python考试题目所涵盖的一些关键知识点: 1. **字符串操作**:在Python中,字符串是不可变的序列...

    Python介绍及命令行解释.pdf

    Python是一种高级编程语言,以其简洁明了的语法和强大的功能深受程序员喜爱。在这个PDF文档中,主要介绍了Python的基础知识,包括如何在命令行环境中运行Python、编写简单的Python程序,以及Python的基本数据类型和...

    编程Python习题练习.doc

    10. Python 保留字的正确写法是小写字母,因此 C.print( )是正确的。 11. 高级程序设计语言包括 Python、C++ 和 Visual Basic,以及 Java,所以正确答案是 D.①②③④。 12. Python 中声明字符串变量的关键字...

    Python基础教程

    Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。"Python基础教程"是针对初学者设计的,旨在帮助读者合理规划学习路径,系统地掌握Python编程的基础知识,并逐步深入理解其核心概念...

    编程(完整版)Python题库word练习.doc

    11. Python中的保留字是小写的,因此 C.print( )是正确的写法。 12. B.40xl 包含非法字符 `xl`,因此不是合法的Python变量名。 13. Python不支持 `char` 数据类型,因此 A.char 是不被支持的。 14. D._abc...

    python实用笔记

    Python是一种广泛使用的高级编程语言,以其简洁的语法和强大的功能深受程序员喜爱。本笔记将探讨Python的基础知识,包括基本写法、函数和语法。 首先,Python库是其强大功能的重要组成部分。例如,numpy库用于矩阵...

    PYthon学习书籍

    Python是一种高级编程语言,它以其简单易学而著称,非常适合初学者入门编程。本学习书籍是为对Python感兴趣的读者准备的,旨在帮助他们快速上手Python,并了解其在数据科学中的重要地位及应用前景。本书将详细介绍...

    Python进阶

    书中内容涵盖了多个Python高级主题,详细介绍了Python的高级特性、技巧和最佳实践。其中,*args和**kwargs是Python语言中非常灵活的参数传递方式,允许函数接受不定数量的参数。*args用于接收额外的位置参数,而**...

Global site tag (gtag.js) - Google Analytics