Python那些事——python的奇技淫巧!

編程語言 Python Windows Perl 科趣 科趣 2017-09-15

隨著近幾年人工智能的流行,從而引發了一個編程語言的興起,我想說到這,大家應該都明白了這是什麼吧,沒錯它就是大名鼎鼎的——Python

Python那些事——python的奇技淫巧!

對於python,我給大家總結了以下幾點:

Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麵向對象的腳本語言。

Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。

Python那些事——python的奇技淫巧!

  • Python 是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。

  • Python 是交互式語言: 這意味著,您可以在一個Python提示符,直接互動執行寫你的程序。

  • Python 是面嚮對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。

  • Python 是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發,從簡單的文字處理到 WWW 瀏覽器再到遊戲。

在這裡,我給大家就分享一個關於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

獲取當前時間

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

文件操作輸出一個目錄下所有文件名稱

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

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

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

字典操作(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) for i in ddict if len(ddict)>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

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 #執行字符串中的內容

函數操作裝飾器函數輸出當前時間裝飾器

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

Python那些事——python的奇技淫巧!

如果喜歡,大家可以收藏哦,你們的支持是對我更新最大的動力!

相關推薦

推薦中...