作者: wyh草樣
出處:什麼是檔案
檔案是系統儲存區域的乙個命名位置,用來儲存一些資訊,便於後續訪問。能夠在非易失性儲存器中實現持續性儲存,比如在硬碟上。當我們要讀取或者寫入檔案時,我們需要開啟檔案;在操作完畢時,我們需要關閉檔案,以便釋放和檔案操作相關的系統資源,因此,檔案操作的主要包括以下:
開啟檔案
python使用內建的open(程式設計客棧)函式開啟乙個檔案,並且返回乙個檔案物件,也叫控制代碼(handle)。
f = open("test.txt") # 在本程式設計客棧資料夾下面的乙個檔案
f = open("c:/python33/readme.txt") # 全路徑
再開啟檔案時,我們需要指定檔案開啟的模式,當我們需要讀取檔案時,使用f = open("test.txt", 'r'),寫入檔案時,使用f = open("test.txt", 'w'),追加輸入時f = open("test.txt", 'a'),這裡的a就是append的意思。追加模式和寫入模式的區別就是,寫入模式開啟乙個檔案時,無論這個檔案是否有內容,都會被清空再寫入;在使用追加模式時,開啟的檔案,只是在原有的內容上繼續進行寫入。同時我們也要制定以文字模式開啟還是二進位制模式開啟。
文字模式(text mode)和二進位制(binary mode)模式的區別
文字模式中,讀取時作業系統的換行符('\n' on unix,'\r\n' on windows)會被轉換成python的預設換行符\n,寫入時會將預設的換行符轉換為作業系統的換行符;在二進位制模式中不會轉換。這個轉化在對文字檔案沒有影響,但是對於二進位制資料會有影響,比如影象檔案或者exe檔案等。因此, 再開啟這類檔案時,一般使用二進位制模式進行讀寫
常用模式
r文字模式,讀取
rb二進位制模式,讀取
w文字模式,寫入
wb二進位制模式,寫入
a文字模式,追加
ab二進位制模式,追加
+可讀可寫
f = open("test.txt", 'r') # 讀模式
f = open("test.txt", 'w') # 寫模式
f = open("img.bmp",'r+') # 可讀可寫
f = open("img.bmp",'w+') # 可讀可寫
f = open("img.bmp",'rb') # 二進位制讀取
如何關閉檔案
當檔案操作結束時,我們最好主動關閉檔案。儘管python有垃圾**(garbage collector)機制,去清理不用的物件,但是最好還是自己關閉檔案。
最簡單的方法就是:
f = open("app.log", 'r')
do_something()
f.close()
但是這個辦法不安全,因為在進行其他操作時,可能會出現異常,程式退出,那麼關閉檔案的語句就不會被執行。
因此,可以用語句來處理:
程式設計客棧try:
f = open('app.log', 'r')
do_something()
finally:
f.close()
無論是否發生異常,關閉檔案的指令都會被執行。
但是python官方給出的最佳用法是:
with open('app.log', 'r') as f:
do_something()
使用這種用法,我們不必呼叫close()方法,在with語句程式內部就會執行,無論內部是否出現異常。with語句被稱為上下文管理器,我們可以暫且不管這個的原理,只需要知道使用with語句,關閉檔案的操作會wwpegfc被自動執行,這也是官方推薦的最佳用法,比用語句寫起來簡單。
檔案操作
寫入檔案
主要介紹兩個方法:
1.write()方法
這個方法的引數是乙個單獨的字串,比如:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
s = ''
for data in lines:
s += data
s += '\n'
f.write(s)
其實更好的寫法是使用join函式:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.write('\n'.join(lines))
其實更加優雅的寫法,可以使用生成器:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.writelines("%s\n" % l for l in lines)
讀取檔案
這裡介紹四種用法,後面都預設檔案已經被開啟了:
1.read()方法
result = f.read()
這裡返回的是檔案內容,是str型別的結果,這個方法還帶乙個數值型別的引數,指定讀取多少內容,如果省略了或者是負數,那麼就返回檔案的全部內容。
2.readline()方法
result = f.readline()
返回的也是字串,不過是一行內容,繼續呼叫,就會返回下一行內容
3.readlines()方法
result = f.readlines()
這裡返回的是乙個列表,但是當資料較大時,這樣的用法會很占用記憶體,不推薦在資料量大時使用
4.直接迴圈檔案物件
for line in f:
print line
do_something()
這樣的用法節省記憶體,快速,並且**還簡單
result = f.readlinwww.cppcns.comes()
------------------------
result = list(f)
這兩種寫法返回的結果是一樣的
顯然我們推薦第四種用法。
如何處理大檔案
大檔案主要問題在於占用記憶體較大,我們不能一下子將檔案全部內容讀入記憶體,最好的做法如下:
with open("log.txt") as f:
for line in f:
do_something_with(line)
一行一行讀取,記憶體不會爆,同時速度也更快,使用with語句,無論內部是否出現異常,在結束時,檔案物件都會被關閉,因此在處理大檔案時,最好這樣來做。
python進行檔案操作
什麼是檔案 檔案是系統儲存區域的乙個命名位置,用來儲存一些資訊,便於後續訪問。能夠在非易失性儲存器中實現持續性儲存,比如在硬碟上。當我們要讀取或者寫入檔案時,我們需要開啟檔案 在操作完畢時,我們需要關閉檔案,以便釋放和檔案操作相關的系統資源,因此,檔案操作的主要包括以下 開啟檔案 python使用內...
python連線sftp進行檔案操作
1 新增使用者 root docker groupadd ftpuser root docker useradd g ftpuser s sbin nologin m ftpuser root docker passwd ftpuser root docker cd home mkdir ftpus...
利用fprintf進行檔案操作 向檔案中追加寫入
include include file fp fp fopen c rect.txt a 引數a表示追加寫入 fprintf fp,d rect.left left,top,right,bottom is pointer of the tow points,they are int type fp...