叶落下了思念,风摇曳那些岁岁年年

本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查找。

本文将会持续更新,内容仅限记录一些常用好用却又永远记不住的代码或者模块。

控制台操作

控制台不闪退1os.system('pause')

获取控制台大小1rows, columns = os.popen('stty size', 'r').read().split()

输入输出控制

解决输入提示中文乱码问题1raw_input(unicode('请输入文字','utf-8').encode('gbk'))

格式化输出1print a.prettify()

接受多行输入1

2

3

4

5

6

7

8

9

10

11

12

13

14

15text=""

while 1:

data=raw_input(">>")

if data.strip()=="stop":

break

text+="%s\n" % data

print text

---------------------------

>>1

>>2

>>3

>>stop

1

2

3

同行输出1

2Print '%s' % a,

Print '%s \r' % a

标准输入输出1

2sys.stdout.write("input") 标准输入

sys.stdout.flush() 刷新缓冲区

print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。

颜色控制

控制台颜色控制(适用于windows)1

2

3

4WConio.textcolor(WConio.YELLOW)

print "yellow"

WConio.textcolor(WConio.BLUE)

print "blue"

输出颜色控制(全平台)1

2

3

4

5

6

7

8red = '\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

8from __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

6import 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

25from 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

2from distutils.sysconfig import get_python_lib

print get_python_lib

获取当前python版本1

2sys.version_info

sys.version

获取当前时间1

2

3

4c=time.ctime()

#自定义格式输出

ISOTIMEFORMAT=’%Y-%m-%d %X’

time.strftime( ISOTIMEFORMAT, time.localtime() )

查看系统环境变量1os.environ["PATH"]

获取系统磁盘1os.popen("wmic VOLUME GET Name")

获取当前路径(包括当前py文件名)1os.path.realpath(__file__)

当前平台使用的行终止符1os.linesep

获取终端大小1

2

3rows, 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程序,其后的代码也不会执行。(一般用于线程中退出程序)

网络操作

域名解析为ip1ip= socket.getaddrinfo(domain,'http')[0][4][0]

获取服务器版本信息1

2

3sUrl = 'http://www.163.com'

sock = urllib2.urlopen(sUrl)

sock.headers.values()

文件操作

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

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

w.write("test")

这种写法可以兼容python2/3。

输出一个目录下所有文件名称1

2

3

4

5

6

7

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

6import 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

17def 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

数据操作

判断数据类型1isinstance("123",(int,long,float,complex)

字符串(string)

去掉小数点后面的数字1

2a=1.21311

b=Int(math.floor(a))

字符串倒置1

2>>> a = "codementor"

>>> a[::-1]

字符串首字母变大写1

2

3info = 'ssfef'

print info.capitalize()

print info.title()

返回一个字符串居中,并使用空格填充至长度width的新字符串。1"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。

列举所有字母1

2

3print string.ascii_uppercase 所有大写字母

print string. ascii_lowercase 所有小写字母

print string.ascii_letters 所有字母(包括大小写)

列表(list)

列表去重1

2ids = [1,4,3,3,4,2,3,4,5,6,1]

ids = list(set(ids))

判断列表为空1

2a=[]

if not a:

列表运算1

2

3

4

5a=[1,2,3]

b=[3,4,5]

set(a)&set(b) 与

set(a)|set(b) 或

set(a)-set(b) 非

单列表元素相加1

2

3a = ["Code", "mentor", "Python", "Developer"]

>>> print " ".join(a)

Code mentor Python Developer

多列表元素分别相加1

2

3

4

5

6

7

8list1 = ['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

4a = [[1, 2], [3, 4], [5, 6]]

>>> import itertools

>>> list(itertools.chain.from_iterable(a))

[1, 2, 3, 4, 5, 6]

列表内元素相加1

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

sum(a)

产生a-z的字符串列表1map(chr,range(97,123))

列表复制1

2

3a=[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

4a=[[1,2],[3,4]]

b=[for j in i for i in a]

print b

[1,2,3,4]

生成一个生成器,调用next方法,可以减少内存开支。1a=(i else i+1 for i in b if i==1)

字典推导

更换key与value位置1

2dict={"a":1,"b":2}

b={value:key for key value in dict.items()}

字典操作(dict)

筛选出值重复的key1

2

3

4

5

6list1=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

2file_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

3b={"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

10fb.py:

-----------------------

__all__=["a","b"]

a="123"

c="2345"

def b():

print “123”

-----------------------

from fb import *

可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。

导入上级目录下的包1

2sys.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/exec1

2

3

4def test(content):

print content

exec(“test(‘abc')”)

输出:abc

说明:exec函数没有返回值1

2

3

4def test(content):

return content

print eval(“test(‘abc')”)

输出:abc

说明:eval函数有返回值

装饰器函数

输出当前时间装饰器1

2

3

4

5def current_time(aclass):

def wrapper():

print "[Info]NowTimeis:",time.ctime()

return aclass()

return wrapper

itertools迭代器1

2

3p=product(["a","b","c","d"],repeat=2)

----

[("a","a"),("b","b")......]

reduce函数

函数本次执行的结果传递给下一次。1

2

3

4def test(a,b):

return a+b

reduce(test,range(10))

结果:从0+1+2......+9

enumerate函数

输入列表元素以及序列号1

2

3n=["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

23import 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

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

14import 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

14import 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()

时间墙

@2017.04.19创建此文

@2017.04.24增加eval/exec函数

@2017.05.27增加程序操作、函数超时、函数出错重试

python 爱心文字墙_python奇技淫巧 | nMask's Blog相关推荐

  1. python 爱心文字墙_博客园墙裂推荐!从未见过如些清新脱俗的完整Python+requests接口自动化测试框架搭建文章!...

    前言 很多小伙伴不知道什么是框架?框架有哪些东西? 一步步从需求分析到报告生成告诉你如何搭自动化建框架. 学完unittest后这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main. ...

  2. python编辑器文字放大_python学习笔记000

    写在最前面 其实想学习编程很久了,以前也陆陆续续学习过一段时间的编程,但总是半途而废,经过我长达三秒钟的思考,总结出以下两个方面的原因: 1.没有学习的压力.因为我不是程序员,编程不是我吃饭的家伙,会 ...

  3. python屏幕文字识别_python 图片文字识别 可截图识别

    [Python] 纯文本查看 复制代码import osfrom aip import AipOcr import keyboard from PIL import ImageGrab from ti ...

  4. python ocr 文字识别_python:使用 cnocr 进行文字识别

    python:使用 cnocr 进行文字识别 2020-08-30 09:09:40 cnocr 是 Python 3 下的中英文OCR工具包,自带了多个训练好的识别模型(最小模型仅 4.7M),安装 ...

  5. python爬虫文字加密_Python爬虫进阶必备 | X薯中文网加密分析

    此次来分析某个小说网站. aHR0cHM6Ly9nLmhvbmdzaHUuY29tL2NvbnRlbnQvOTM0MTYvMTM4Nzc5MTIuaHRtbA==node 分析请求 先来看看页面的请求 ...

  6. python屏幕文字识别_Python文字截图识别OCR工具实例解析

    一.简介 你一定用过那种"OCR神器",可以把图片中的文字提取出来,极大的提高工作效率. 今天,我们就来做一款实时截图识别的小工具.顾名思义,运行程序时,可以实时把你截出来的图片中 ...

  7. python识别文字颜色_python读取word文档识别字段颜色,解析字段

    python版本3.7.3,读取的文档格式为.docx 文中带有简单注释 看不懂的百度网盘下载直接查看,更改运行里面的py文件 提取码:nngw import os import sys import ...

  8. python爱心代码制作_Python之——爱心代码参与情人节

    一行代码实现输出爱心图,参考https://zhuanlan.zhihu.com/p/23321351 原理: 1.借助数学函数--((x * 0.05) ** 2 + (y * 0.1) ** 2 ...

  9. python统计文字个数_python如何统计字符串中字母个数?

    方法:首先用"str_count = 0"定义字母的字符初始个数为0:接着遍历字符串,判断字符串内各字符的类型,并将字母个数累加:最后用"print('字母 = %d' ...

最新文章

  1. ruby 反射机制常用方法
  2. Python 微信机器人:itchat库识别消息来源于群聊还是个人
  3. Mybatis怎么能看是否执行了sql语句
  4. 五位专家跟你讲讲为啥Python更适合做AI/机器学习
  5. raspberry pi_如何保持您的Raspberry Pi更新
  6. Visual Studio可视化IDE风格主题参照
  7. 萌新的Python练习菜鸟100例(十七)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  8. Android通话记录CallLog简单摘要
  9. python爬虫抖音音乐_Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌-后台/架构/数据库-敏捷大拇指-一个敢保留真话的IT精英社区...
  10. 鸿蒙系统能玩魔兽世界吗,魔兽世界TBC燃烧远征测试服,H英雄本的装备2小时内可以交易, 亲友们可以互相毛装备了...
  11. 品质担当,有效提升办公生产力,永艺XY人体工学椅开箱实测
  12. 苹果电脑装Windows7系统U盘启动盘制作教程
  13. x64dbg 修改为dll_X64Dbg使用教程
  14. 双问号??在 js 中的应用
  15. vue3 创建vue3模板
  16. [笑语天下]风景、照片与评论古今
  17. 音频倍速(变速不变调)的实现
  18. eclipse源码中文注释乱码问题解决方法
  19. 计算机应用投稿建议,计算机类核心期刊投稿心得【转】 - 计算机软件及计算机应用 - 电子技术及信息科学 - C......
  20. 目标检测与YOLO算法(用Python实现目标检测)

热门文章

  1. 案例详解:MTU不一致导致主机和RAC不断重启
  2. 2019 ACOUG年会圆满结束(附PPT和视频下载)
  3. 快收下这份“数据库运作实践”秘制口诀
  4. 来了!PostgreSQL 同步流复制原理和代码浅析,请签收
  5. 华为云严选上新啦!高效准确的数据同步方案来了
  6. 初识GaussDB(for Cassandra)
  7. 你的数仓函数结果不稳定,可能是属性指定错了
  8. 【华为云技术分享】如何使用pyCharm与ModelArts公有云服务联动开发,快速且充分地利用云端GPU计算资源
  9. webpack4.0各个击破(10)—— Integration篇
  10. 一统江湖的大前端(3) DOClever——你的Postman有点Low