利用python進行檔案操作

2022-09-26 18:51:18 字數 3161 閱讀 3921

作者: 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...