Python常用函式的使用例項
阿新 • • 發佈:2019-01-26
獲取當前資料夾下的所有檔案
# -*- coding: utf-8 -*-
import os
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
print(root) #當前目錄路徑
print(dirs) #當前路徑下所有子目錄
print(files) #當前路徑下所有非目錄子檔案
# -*- coding: utf-8 -*- import os def file_name(file_dir): L=[] for root, dirs, files in os.walk(file_dir): for file in files: if os.path.splitext(file)[1] == '.jpeg': L.append(os.path.join(root, file)) return L #其中os.path.splitext()函式將路徑拆分為檔名+副檔名
# -*- coding: utf-8 -*-
import os
def listdir(path, list_name): #傳入儲存的list
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
listdir(file_path, list_name)
else:
list_name.append(file_path)
複製/移動檔案排序基礎# -*- coding: utf-8 -*- #!/usr/bin/python #test_copyfile.py import os,shutil def mymovefile(srcfile,dstfile): if not os.path.isfile(srcfile): print("%s not exist!"%(srcfile)) else: fpath,fname=os.path.split(dstfile) #分離檔名和路徑 if not os.path.exists(fpath): os.makedirs(fpath) #建立路徑 shutil.move(srcfile,dstfile) #移動檔案 print("move %s -> %s"%( srcfile,dstfile)) def mycopyfile(srcfile,dstfile): if not os.path.isfile(srcfile): print("%s not exist!"%(srcfile)) else: fpath,fname=os.path.split(dstfile) #分離檔名和路徑 if not os.path.exists(fpath): os.makedirs(fpath) #建立路徑 shutil.copyfile(srcfile,dstfile) #複製檔案 print("copy %s -> %s"%( srcfile,dstfile)) srcfile='/Users/xxx/git/project1/test.sh' dstfile='/Users/xxx/tmp/tmp/1/test.sh' mymovefile(srcfile,dstfile)
sorted([5, 2, 3, 1, 4])
輸出[1, 2, 3, 4, 5]
a = [5, 2, 3, 1, 4]
a.sort()
a
輸出[1, 2, 3, 4, 5]
插入排序import sys def insert_sort(a): ''''' 插入排序 有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數, 但要求插入後此資料序列仍然有序。剛開始 一個元素顯然有序,然後插入一 個元素到適當位置,然後再插入第三個元素,依次類推 ''' a_len = len(a) for i in range(a_len): key = a[i] j = i - 1 while a_len = 0 and a[j] > key: a[j+1] = a[j] j-=1 a[j+1] = key return a if __name__ == '__main__': nums = [10,8,4,-1,2,6,7,3] print 'nums is:', nums insert_sort(nums) print 'insert sort:', nums
由於要用到對無序的檔案進行重新命名,以下寫了一個指令碼,進行批量進行重新命名。
基本格式是 i.字尾名 ( i 迴圈條件下的數 )
# -*- coding: utf-8 -*-
import os;
def rename():
i=0
path="F:\test";
filelist=os.listdir(path)#該資料夾下所有的檔案(包括資料夾)
for files in filelist:#遍歷所有檔案
i=i+1
Olddir=os.path.join(path,files);#原來的檔案路徑
if os.path.isdir(Olddir):#如果是資料夾則跳過
continue;
filename=os.path.splitext(files)[0];#檔名
filetype=os.path.splitext(files)[1];#副檔名
Newdir=os.path.join(path,str(i)+filetype);#新的檔案路徑
os.rename(Olddir,Newdir)#重新命名
rename()
使用open開啟檔案後一定要記得呼叫檔案物件的close()方法。比如可以用try/finally語句來確保最後能關閉檔案。一次性讀取整個檔案內容
# -*- coding: utf-8 -*-
import os;
file_object = open('thefile.txt')
try:
all_the_text = file_object.read()
finally:
file_object.close()
但是每次都這麼寫實在太繁瑣,所以,Python引入了with語句來自動幫我們呼叫close()方法:with open('/path/to/file', 'r') as f:
print(f.read())
要讀取非UTF-8編碼的文字檔案,需要給open()函式傳入encoding引數,例如,讀取GBK編碼的檔案:
f = open('test.txt', 'r', encoding='gbk')
f.read()
遇到有些編碼不規範的檔案,你可能會遇到UnicodeDecodeError,因為在文字檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函式還接收一個errors引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:
f = open('test.txt', 'r', encoding='gbk', errors='ignore')
使用正則表示式的re.split()方法,一次性拆分字串
import re
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
print re.split(r'[;|,\t]+',s)
輸出:
['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
字典操作# -*- coding: UTF-8 -*-
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "Value : %s" % dict.has_key('Age')
del dict['Name']; # 刪除鍵是'Name'的條目
dict.clear(); # 清空詞典所有條目
del dict ; # 刪除詞典
# -*- coding: UTF-8 -*-
a={1:'3', 'a':23, 5:654}
for k in dict.keys(a):
print(k)
for v in dict.values(a):
print(v)
for k,v in dict.items(a):
#print(str(k)+":"+str(v))
print("%s:%s"%(k,v))
判斷資料型別# -*- coding: UTF-8 -*-
a=4
b='4'
c=True
print(isinstance(a,int))
print(isinstance(b,str))
print(isinstance(c,bool))
資料型別轉換
# -*- coding: UTF-8 -*-
a=5
b=str(a)
print(b)
c='67'
d=int(c)
print(d)
面向物件
# -*- coding: UTF-8 -*-
class Employee:
'所有員工的基類'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
if __name__ == '__main__':
employee1=Employee('Tom',18000)
employee2=Employee('Tina',20000)
employee1.displayEmployee()
employee2.displayEmployee()
多執行緒
# -*- coding: UTF-8 -*-
import _thread
import time
# 為執行緒定義一個函式
def print_time( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print ("%s: %s" % ( threadName, time.ctime(time.time()) ))
# 建立兩個執行緒
try:
_thread.start_new_thread( print_time, ("Thread-1", 2 ) )
_thread.start_new_thread( print_time, ("Thread-2", 4 ) )
except:
print ("Error: unable to start thread")
while 1:
pass
字串contains功能
site = 'http://www.sharejs.com/'
if "sharejs" in site:
print('site contains sharejs')
s = "This be a string"
if s.find("is") == -1:
print "No 'is' here!"
else:
print "Found 'is' in the string."
列表推導式:[表示式 for 變數 in 列表] 或者 [表示式 for 變數 in 列表 if 條件]
def squared(x):
return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print multiples
# Output: [0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
字典推導式:{ key_expr: value_expr for value in collection if condition }mca={"a":1, "b":2, "c":3, "d":4}
dicts={v:k for k,v in mca.items()}
print dicts
# Output: {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
集合推導式:{ expr for value in collection if condition }
跟列表推導式也是類似的。 唯一的區別在於它使用大括號{}
strings = ['a','is','with','if','file','exception']
print {len(s) for s in strings}
# Output: set([1, 2, 4, 9])
lambda表示式(匿名函式)lambda所表示的匿名函式的內容應該是很簡單的,如果複雜的話,乾脆就重新定義一個函數了,使用lambda就有點過於執拗了
func=lambda x:x+1
print(func(1))
#2
print(func(2))
#3
#以上lambda等同於以下函式def func(x):
return(x+1)
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
#等同於
list1 = [3,5,-4,-1,0,-2,-6]
def get_abs(x):
return abs(x)
sorted(list1,key=get_abs)
filter() 函式
用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
map()函式
map()是 Python 內建的高階函式,它接收一個函式 f 和一個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回
map()函式不改變原有的 list,而是返回一個新的 list。
利用map()函式,可以把一個 list 轉換為另一個 list,只需要傳入轉換函式
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
輸出結果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
獲取指令碼自身檔名
import os
f_name=os.path.basename(__file__).split('.')[0]
獲取指令碼所在的目錄
import os
f_name=os.path.dirname(__file__))
使用python 的os.system來執行系統命令
import os
print(os.system('ping www.baidu.com'))
os.system執行返回0表示成功,否則表示失敗os.popen() 方法用於從一個命令開啟一個管道
通過os.popen()返回的是 file read 的物件,對其進行讀取read()操作可以看到執行的輸出
print(os.popen('echo "hello"').readline())
輸出 hello