隨著近幾年人工智能的流行,從而引發了一個編程語言的興起,我想說到這,大家應該都明白了這是什麼吧,沒錯它就是大名鼎鼎的——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 |
如果喜歡,大家可以收藏哦,你們的支持是對我更新最大的動力!