什麼是檔案
檔案是系統儲存區域的乙個命名位置,用來儲存一些資訊,便於後續訪問。能夠在非易失性儲存器中實現持續性儲存,比如在硬碟上。當我們要讀取或者寫入檔案時,我們需要開啟檔案;在操作完畢時,我們需要關閉檔案,以便釋放和檔案操作相關的系統資源,因此,檔案操作的主要包括以下:
開啟檔案
python使用內建的open()函式開啟乙個檔案,並且返回乙個檔案物件,也叫控制代碼(handle)。
f = open("test.txt") # 在本資料夾下面的乙個檔案
f = open("c:/python33/readme.txt") # 全路徑
文字模式(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)機制,去清理不用的物件,但是最好還是自己關閉檔案。
最簡單的方法就是:
do_something()
f.close()
但是這個辦法不安全,因為在進行其他操作時,可能會出現異常,程式退出,那麼關閉檔案的語句就不會被執行。
因此,可以用語句來處理:
try:
do_something()
finally:
f.close()
無論是否發生異常,關閉檔案的指令都會被執行。
但是python官方給出的最佳用法是:
do_something()
使用這種用法,我們不必呼叫close()方法,在with語句程式內部就會執行,無論內部是否出現異常。with語句被稱為上下文管理器,我們可以暫且不管這個的原理,只需要知道使用with語句,關閉檔案的操作會被自動執行,這也是官方推薦的最佳用法,比用語句寫起來簡單。
檔案操作
寫入檔案
主要介紹兩個方法:
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))
2.writelines()方法
引數是一組可迭代的字串,比如
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
new_lines =
for data in lines:
f.writelines(new_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.readlines()
------------------------
result = list(f)
這兩種寫法返回的結果是一樣的
顯然我們推薦第四種用法。
如何處理大檔案
大檔案主要問題在於占用記憶體較大,我們不能一下子將檔案全部內容讀入記憶體,最好的做法如下:
with open("log.txt") as f:
for line in f:
do_something_with(line)
一行一行讀取,記憶體不會爆,同時速度也更快,使用with語句,無論內部是否出現異常,在結束時,檔案物件都會被關閉,因此在處理大檔案時,最好這樣來做。 利用python進行檔案操作
作者 wyh草樣 出處 什麼是檔案 檔案是系統儲存區域的乙個命名位置,用來儲存一些資訊,便於後續訪問。能夠在非易失性儲存器中實現持續性儲存,比如在硬碟上。當我們要讀取或者寫入檔案時,我們需要開啟檔案 在操作完畢時,我們需要關閉檔案,以便釋放和檔案操作相關的系統資源,因此,檔案操作的主要包括以下 開啟...
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...
使用QFile進行檔案操作
qfile類我我們提供了操作檔案的常用功能。它是一種io裝置,可以用來讀寫文字檔案和二進位制檔案,也可以用來讀寫qt的資源檔案。qfile類可以單獨使用,該類本身提供了read write函式,但更方便的方式是,將qfile和qtextstream或qdatastream一起使用。一般情況下,使用q...