python進行檔案操作

2022-05-05 17:18:14 字數 3209 閱讀 2235

什麼是檔案

檔案是系統儲存區域的乙個命名位置,用來儲存一些資訊,便於後續訪問。能夠在非易失性儲存器中實現持續性儲存,比如在硬碟上。當我們要讀取或者寫入檔案時,我們需要開啟檔案;在操作完畢時,我們需要關閉檔案,以便釋放和檔案操作相關的系統資源,因此,檔案操作的主要包括以下:

開啟檔案

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...