1. 程式人生 > >Python常用函式的使用例項

Python常用函式的使用例項

獲取當前資料夾下的所有檔案

# -*- 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