python讀寫檔案

2021-09-05 19:40:45 字數 3030 閱讀 4777

python 對檔案的讀寫在程式開發中也是非常常見的操作,比如寫入一些簡單的系統日誌、把爬蟲採集的資料寫入到本地檔案等等,今天我們聊聊 python 怎麼去讀寫乙個檔案。

1、python 寫入檔案

# -*- coding:utf-8 -*-

#傳統模式,不夠安全,需要手動關閉檔案資源

#如果在關閉檔案之前程式異常終止,

#被開啟的檔案不能被關閉,占用系統資源

f = open('newfile1.txt','w')

f.write('這種模式寫入不夠安全,請慎用')

f.close()

#推薦模式,即使程式異常終止

#也會自動關閉檔案

#類似於 try catch

with open('newfile2.txt','w') as f:

f.write('推薦使用這種模式')

open('***.txt','w'),'w' 表示以寫的模式開啟檔案,在寫之前要先找到這個檔案,如果檔案不存在, python 則會先自動建立該檔案,然後再寫入內容。

注意程式寫入的內容並不一定立刻就寫入硬碟了,往往是先寫入到記憶體中,然後再根據的系統的空閒時間慢慢從記憶體寫入硬碟中,等到呼叫 close 方法的時候才會確認把記憶體中剩下的資料寫入到硬碟。

所以一旦我們忘記主動呼叫 close 來關閉檔案的話,或者在程式寫入檔案的時候出現異常終止程式從而不會再繼續往下執行 close 方法,就可能導致部分資料丟失,為了避免這種情況,我們推薦使用 with 這種方式來開啟檔案,使用 with 即不管是程式在完成對檔案寫入操作之後還是程式寫入檔案異常終止都會自動呼叫 close 方法來關閉檔案。

# -*- coding:utf-8 -*-

#內容追加模式

with open('newfile2.txt','a') as f:

f.write('不會覆蓋已有內容')

如果重複對乙個檔案寫入內容,會不會對已經存在的內容有影響呢,答案是會的。

python 的檔案寫模式分覆蓋寫和追加寫。剛剛上面提到的 'w' 模式就是覆蓋寫,即每次以 'w' 模式開啟檔案都會先直接清空該檔案,注意是只要一開啟就會先清空即使你不寫入任何內容。還有一種就是使用 'a' 追加模式,這種模式不會清空檔案中原有的內容,只會在原有內容後面繼續追加新的內容。

2、python 讀檔案

# -*- coding:utf-8 -*-

#讀檔案,一次性讀所有內容,適用檔案大小較小

with open('newfile1.txt','r') as f:

print(f.read())

#讀檔案,迴圈讀,每次唯讀指定大小的內容,適用檔案大小較大

with open('newfile1.txt','r') as f:

while true:

print(f.read(2))

# 開啟gbk檔案

with open('newfile1.txt','r',encoding='gbk') as f:

print(f.read())

#按行讀取內容

with open('newfile1.txt','r') as f:

for line in f.readlines():

print(line)

讀檔案和寫檔案類似,只不過是以讀的模式開啟檔案,open('***.txt','r'),'r' 表示以唯讀模式開啟檔案,讀模式開啟檔案需要確認檔案已經存在,如果檔案不存在程式會報找不到檔案的錯誤。

如果檔案開啟成功,接下來會呼叫 read 方法來一次性把檔案的所有內容讀到記憶體當中,最後再需要呼叫 close 來關閉檔案。檔案的讀寫操作完成之後都需要關閉檔案,不然一直開啟的檔案會占用系統資源。

同樣的,由於檔案的讀寫過程中可能會出現異常,導致不能執行後面的 close 方法來關閉檔案,所以跟上面提到的檔案的寫入一樣,我們也推薦使用 with 來開啟檔案,總之,對於檔案的讀寫操作,都推薦使用 with 方式來開啟。

# -*- coding:utf-8 -*-

#讀檔案,迴圈讀,每次唯讀指定大小的內容,適用檔案大小較大

with open('newfile1.txt','r') as f:

while true:

print(f.read(2))

如果乙個檔案很大,有幾十個 g ,那麼把所有的內容一次性讀到記憶體中肯定不現實,這時候我們可以迴圈讀檔案,每次唯讀指定大小的內容,read(size) 表示只讀取 size 位元組的資料。

# -*- coding:utf-8 -*-

#按行讀取內容

with open('newfile1.txt','r') as f:

for line in f.readlines():

print(line)

也有的檔案內容是按行寫入的,比如常見的 config 配置檔案,我們還可以使用 readline() 可以按行來讀取內容,也可以把檔案所有內容先按行讀取最後放到乙個陣列 list 中返回。

# -*- coding:utf-8 -*-

# 開啟gbk檔案

with open('newfile1.txt','r',encoding='gbk') as f:

print(f.read())

實際上不同的檔案會有不同的編碼格式,上面我們講的都是基於 utf-8 編碼格式的檔案,如果要開啟非 utf-8 的檔案,還需要使用 open('***.txt','r',encoding='gbk') 這種方式來指定檔案的編碼。

3、二進位制檔案讀寫

# -*- coding:utf-8 -*-

#二進位制讀寫檔案

Python檔案讀寫

今天在看python檔案讀寫操作,發現python file name mode buffering file 函式用於建立乙個file物件,它有乙個別名叫open 可能更形象一些,它們是內建函式。來看看它的引數。它引數都是以字串的形式傳遞的。name是檔案的名字。mode 是開啟的模式,可選的值為...

python檔案讀寫

檔案讀寫模式 模式 描述 r以讀方式開啟檔案,可讀取檔案資訊。w以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容 a以追加模式開啟檔案 即一開啟檔案,檔案指標自動移到檔案末尾 如果檔案不存在則建立 r 以讀寫方式開啟檔案,可對檔案進行讀和寫操作。w 消除檔案內容,然後以讀寫...

python 讀寫檔案

python讀寫檔案在文字不大的情況可以用正常的 open 然後讀入 readline行讀入 或者整體讀入 read readlines 基本知識 file open path,r 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只...