1. 程式人生 > >Python學習筆記——常用庫、函式的使用(持續更新)

Python學習筆記——常用庫、函式的使用(持續更新)

一、OS模組

1、當前使用平臺

os.name:指示你正在使用的工作平臺。比如對於Windows,它是'nt',而對於Linux/Unix使用者,它是'posix'。

2、當前路徑和檔案

os.getcwd() :返回當前工作目錄

os.listdir(): 返回指定目錄下的所有檔案和目錄名

3、os.path系列

(1)os.path.join(path,name)

該函式實現的功能為連線目錄與檔名或目錄,用於路徑拼接檔案路徑,可以傳入多個路徑。

基本功能為:

要注意:

  • 會從第一個以”/”開頭的引數開始拼接,之前的引數全部丟棄。

  • 以上一種情況為先。在上一種情況確保情況下,若出現”./”開頭的引數,會從”./”開頭的引數的上一個引數開始拼接。如圖:

此外:

輸出:

(2)os.path.exists(name)

判斷是否存在檔案或目錄name,如果存在,返回True;如果不存在,返回False。

(3)os.path.isdir(name):判斷name是不是目錄,不是目錄就返回false

os.path.isfile(name):判斷name這個檔案是否存在,不存在返回false

os.path.getsize(name):或得檔案大小,如果name是目錄返回0L

os.path.abspath(name):獲得絕對路徑

os.path.isabs():判斷是否為絕對路徑

os.path.normpath(path)

:規範path字串形式

os.path.split(name):分割檔名與目錄(事實上,如果你完全使用目錄,它也會將最後一個目錄作為檔名而分離,同時它不會判斷檔案或目錄是否存在)

os.path.splitext():分離檔名和副檔名

os.path.basename(path):返回檔名

os.path.dirname(path):返回檔案路徑

os.path.getmtime(path):返回檔案或目錄的最後修改時間,結果為秒數

os.path.getatime(path):返回檔案或目錄的最後訪問時間,結果為秒數

os.path.getctime(path):返回檔案或目錄的建立時間,結果為秒數

os.path.getsize(path):返回檔案大小

os.path.isfile(path):判斷path是否為檔案,是返回True,不是返回False

os.path.isdir(path):判斷path是否為目錄,是返回True,不是返回False

4、os.mkdir()與os.makedirs()

os.mkdir()建立路徑中的最後一級目錄,即:只建立path_03目錄,而如果之前的目錄不存在並且也需要建立的話,就會報錯。os.makedirs()建立多層目錄,即:Test,path_01,path_02,path_03如果都不存在的話,會自動建立。

結果為:

5、os.remove(file):刪除一個檔案

os.stat(file:獲得檔案屬性

os.chmod(file):修改檔案許可權和時間戳

os.rmdir("dir"): 只能刪除空目錄

二、檔案操作

os.mknod("text.txt"):建立空檔案

fp = open("text.txt",w):直接開啟一個檔案,如果檔案不存在就建立檔案

關於open的模式:

w 寫方式
a 追加模式開啟(從EOF開始,必要時建立新檔案)
r+ 以讀寫模式開啟
w+ 以讀寫模式開啟
a+ 以讀寫模式開啟
rb 以二進位制讀模式開啟
wb 以二進位制寫模式開啟 (參見 w )
ab 以二進位制追加模式開啟 (參見 a )
rb+ 以二進位制讀寫模式開啟 (參見 r+ )
wb+ 以二進位制讀寫模式開啟 (參見 w+ )
ab+ 以二進位制讀寫模式開啟 (參見 a+ )

fp.read([size])  #size為讀取的長度,以byte為單位

fp.readline([size])  #讀一行,如果定義了size,有可能返回的只是一行的一部分

fp.readlines([size])  #把檔案每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過迴圈呼叫readline()來實現的。如果提供size引數,size是表示讀取內容的總長,也就是說可能只讀到檔案的一部分。

fp.write(str)  #把str寫到檔案中,write()並不會在str後加上一個換行符

fp.writelines(seq)  #把seq的內容全部寫到檔案中(多行一次性寫入)。這個函式也只是忠實地寫入,不會在每行後面加上任何東西。

fp.close()  #關閉檔案。python會在一個檔案不用後自動關閉檔案,不過這一功能沒有保證,最好還是養成自己關閉的習慣。 如果一個檔案在關閉後還對其進行操作會產生ValueError

fp.flush()  #把緩衝區的內容寫入硬碟

fp.fileno()  #返回一個長整型的”檔案標籤“

fp.isatty()  #檔案是否是一個終端裝置檔案(unix系統中的)

fp.tell()  #返回檔案操作標記的當前位置,以檔案的開頭為原點

fp.next()  #返回下一行,並將檔案操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是呼叫next()函式來實現遍歷的。

fp.seek(offset[,whence])  #將檔案打操作標記移到offset的位置。這個offset一般是相對於檔案的開頭來計算的,一般為正數。但如果提供了whence引數就不一定了,whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以檔案末尾為原點進行計算。需要注意,如果檔案以a或a+的模式開啟,每次進行寫操作時,檔案操作標記會自動返回到檔案末尾。

fp.truncate([size])  #把檔案裁成規定的大小,預設的是裁到當前檔案操作標記的位置。如果size比檔案的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些隨機的內容加上去。

三、glob

glob包最常用的方法只有一個, glob.glob()。

函式功能:匹配所有的符合條件的檔案,並將其以list的形式返回。跟使用windows下的檔案搜尋差不多。 
”*”匹配0個或多個字元; 
”?”匹配單個字元; 
”[]”匹配指定範圍內的字元,如:[0-9]匹配數字。

如:

import glob

#獲取指定目錄下的所有圖片

print glob.glob(r"/home/Picture/*/*.jpg")

四、Matplotlib

# 匯入繪圖模組

import matplotlib.pyplot as plt

五、xrange() 與range函式用法

函式語法:

range(stop)

range([start,] stop[, step]):根據start與stop指定的範圍以及step設定的步長,生成一個序列。

引數說明:

  • start: 計數從 start 開始。預設是從 0 開始。例如 xrange(5) 等價於 xrange(0, 5)
  • stop: 計數到 stop 結束,但不包括 stop。例如:xrange(0, 5) 是 [0, 1, 2, 3, 4] 沒有 5
  • step:步長,預設為1。例如:xrange(0, 5) 等價於 xrange(0, 5, 1)

xrange() 函式用法與range 完全相同,所不同的是生成的不是一個數組,而是一個生成器。

由上面的示例可以知道:要生成很大的數字序列的時候,用xrange會比range效能優很多,因為不需要一上來就開闢一塊很大的記憶體空間,這兩個基本上都是在迴圈的時候用:

所以xrange做迴圈的效能比range好,尤其是返回很大的時候,所以儘量用xrange,除非是要返回一個列表。

NB:以上xrange()函式是在Python2中的函式,在Python 3中,range()的實現方式與xrange()函式相同,所以就不存在專用的xrange( )。

在Python3中range() 函式返回的是一個可迭代物件(型別是物件),而不是列表型別, 所以列印的時候不會列印列表。

list() 函式是物件迭代器,把物件轉為一個列表。返回的變數型別為列表。

六、zip()函式

 (1)考慮下面的股票名和價格對映字典:

                prices = {'ACME': 45.23,'AAPL': 612.78,'IBM': 205.55,'HPQ': 37.20,'FB': 10.75}

          為了對字典值執行計算操作,通常需要使用zip()函式先將鍵和值反轉過來.下面是查詢最小和最大股票價格和股票值的程式碼:
        min_price = min(zip(prices.values(), prices.keys()))
                          # min_price is (10.75, 'FB')
                          max_price = max(zip(prices.values(), prices.keys()))
                          # max_price is (612.78, 'AAPL')

 執行這些計算的時候,需要注意的是zip() 函式建立的是一個只能訪問一次的迭代器。比如,下面的程式碼就會產生錯誤:

                           prices_and_names = zip(prices.values(), prices.keys())
                           print(min(prices_and_names)) # OK
                           print(max(prices_and_names)) # ValueError: max() arg is an empty sequence

(2)使用zip函式, 把key和value的list組合在一起, 再轉成字典(dict).

七、yield關鍵字

先介紹可迭代的物件的概念:當你使用一個列表生成式來建立一個列表的時候,就建立了一個可迭代的物件,如:

在這裡,所有的值都存在記憶體當中,所以並不適合大量資料。

再介紹生成器的概念:

  • 可迭代
  • 只能讀取一次
  • 實時生成資料,不全存在記憶體中

這裡將“[]"換成了“()"。

yield關鍵字:

  • yield 是一個類似 return 的關鍵字,只是這個函式返回的是個生成器
  • 當你呼叫這個函式的時候,函式內部的程式碼並不立馬執行 ,這個函式只是返回一個生成器物件
  • 當你使用for進行迭代的時候,函式中的程式碼才會執行

第一次迭代中你的函式會執行,從開始到達 yield 關鍵字,然後返回 yield 後的值作為第一次迭代的返回值. 然後,每次執行這個函式都會繼續執行你在函式內部定義的那個迴圈的下一次,再返回那個值,直到沒有可以返回的。

八、datetime模組計算時間差

python中通過datetime模組可以很方便的計算兩個時間的差,datetime的時間差單位可以是天、小時、秒,甚至是微秒。

如下為此函式的使用示例:

    import datetime 

    di=datetime.datetime.now()
    for times in range(Max):
        PrintN2(A,x)
    d1=datetime.datetime.now()
    print(d1-di)