open函數在內存中建立緩存區,將磁盤上的內容複製到此處。文件內容讀入到文件對象緩衝區後,文件對象將緩衝區視爲很是大的列表,其中每一個元素都有一個索引。文件對象按字節(大約每一個字符)來對文件對象緩衝區索引計數。許多文件方法隱式使用當前文件位置。例如,調用readline方法後,當前文件位置移動到下一個回車處。write方法在當前文件位置寫入。html
Python方法用於當前位置文件:
tell()方法:此方法用於當前文件位置和文件開始位置之間的相對位置,用字節進行計算
seek()方法:此方法將當前文件位置設爲文件對象緩衝區中的新位置,seek方法有兩個參數,第一個參數是字節數目,第二個參數是引用點。當前文件指針從引用點開始,移動給出的字節數目
典型用法:fd.seek(0),將當前文件位置重置爲文件對象fd的開始位置。python
當調用write(str)時,python解釋器調用系統調用想把把內容寫到磁盤,可是linux內核有文件緩存機制,經典影視因此緩存到內核的緩存區,當調用close()或flush()時纔會真正的把內容寫到文件linux
或者寫入數據量大於或者等於寫緩存,寫緩存也會同步到磁盤上緩存
關閉文件的目的多線程
1:寫緩存同步到磁盤函數
2:linux系統中每一個進程打開文件的個數是有限的spa
3:若是打開文件數到了系統限制,在打開文件就會失敗操作系統
如上的代碼不須要人爲的進行close()語句的關閉,當脫離with這段代碼時(即縮進與with相同),將會自動的進行close操做,如上代碼能夠等價看做:線程
CSV是一種文件格式(特別是存儲表格數據,例如excel),其實是文本文件,可使用文本文件函數和方法。指針
Python提供了csv模塊
要處理CSV格式的文件,須要一些新的對象。csv.reader對象讀取文件(使用reader構造函數建立reader對象,參數是文件對象),csv.writer對象寫CSV文件,csv.writer對象經過使用方法writerow來將數據行寫入。
小技巧:因爲raw_input返回值是字符串,所以能夠直接用該字符串做爲open命令的參數
目前流行的操做系統將文件放於目錄結構中。這個假定的特殊容器,在Linux和OS-X中稱爲目錄,在Windows中稱爲文件夾,每一個目錄完成三件事情:
操做系統從根目錄(「/」)開始查找文件,沿着樹結構的邊向下移動。不一樣操做系統中路徑的表示方式略有不一樣,Linux和MAC OS是「/」表示風格,Windows使用反斜槓(\)表示。
os.getcwd函數,getcwd函數是指獲取當前目錄
os.chdir函數,更改目錄,將當前工做目錄改變爲參數所給出的路徑
os.listdir函數,列出路徑參數所指定節點中全部文件和目錄。函數返回的值能夠命名
os.walk函數,遍歷路徑,其中os.walk(「.」)表示從當前目錄開始遍歷
還有split函數,split ext函數和join函數將在以下例子中舉例。
需求以下:
在每一個目錄中,檢查該目錄下的每一個文件是否爲文本文件(擴展爲「.txt」)。若是是文本文件,郵件格式則打開它,讀取內容,而後查看特定字符串是否在文件中。若是找到特定字符串,則將文件添加到文件列表,將目錄添加到目錄列表。完成文件搜索後輸出找到的內容。
(注:在多線程的時候能夠用yield建立線程池)
生成器不會把結果保存在一個系列中,而是保存生成器的狀態,在每次進行迭代時返回一個值,直到遇到StopIteration異常結束。
生成器表達式: 通列表解析語法,只不過把列表解析的[]換成()
生成器表達式能作的事情列表解析基本都能處理,只不過在須要處理的序列比較大時,列表解析比較費內存。
生成器函數: 在函數中若是出現了yield關鍵字,那麼該函數就再也不是普通函數,而是生成器函數。yield 的做用就是把一個函數變成一個 generator,帶有 yield 的函數再也不是一個普通函數,Python 解釋器會將其視爲一個 generator。
yield 與 return:
在一個生成器中,若是沒有return,則默認執行到函數完畢時返回StopIteration(可使用next方法來避免阻塞的產生);
若是遇到return,若是在執行過程當中 return,則直接拋出 StopIteration 終止迭代。
close()
手動關閉生成器函數,後面的調用會直接返回StopIteration異常。