python IO 檔案讀寫

2022-08-25 11:57:17 字數 2597 閱讀 1940

io

由於cpu和記憶體的速度遠遠高於外設的速度,所以,在io程式設計中,就存在速度嚴重不匹配的問題。

如要把100m的資料寫入磁碟,cpu輸出100m的資料只需要0.01秒,可是磁碟要接收這100m資料可能需要10秒,怎麼辦呢?有兩種辦法:

第一種是cpu等著,也就是程式暫停執行後續**,等100m的資料在10秒後寫入磁碟,再接著往下執行,這種模式稱為同步io;

另一種方法是cpu不等待,只是告訴磁碟,「您慢慢寫,不著急,我接著幹別的事去了」,於是,後續**可以立刻接著執行,這種模式稱為非同步io。

同步和非同步的區別就在於是否等待io執行的結果。

檔案讀寫

讀檔案

以讀檔案的模式開啟乙個檔案物件,python內建的open()函式,傳入檔名和標示符

>>> f = open('/users/michael/test.txt', 'r')

標示符'r'表示讀

如果檔案不存在,open()函式就會丟擲乙個ioerror的錯誤

如果檔案開啟成功,呼叫read()方法可以一次讀取檔案的全部內容

>>> f.read()

'hello, world!'#python把內容讀到記憶體,用乙個str物件表示

close()方法關閉檔案

>>> f.close()

呼叫read(size)方法,每次最多讀取size個位元組的內容。

呼叫readline()可以每次讀取一行內容,

呼叫readlines()一次讀取所有內容並按行返回list。

為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally來實現:

try:

f = open('/path/to/file', 'r')

print(f.read())

finally:

if f:

f.close()

簡化:

with open('/path/to/file', 'r') as f:

print(f.read())

這和前面的try ... finally是一樣的,但是**更佳簡潔,並且不必呼叫f.close()方法。

二進位制檔案

b'\xff\xd8\xff\xe1\x00\x18exif\x00\x00...' # 十六進製制表示的位元組

要讀取非utf-8編碼的文字檔案,需要給open()函式傳入encoding引數,例如,讀取gbk編碼的檔案:

>>> f = open('/users/michael/gbk.txt', 'r', encoding='gbk')

>>> f.read()

'測試'

遇到有些編碼不規範的檔案,pen()函式還接收乙個errors引數

>>> f = open('/users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

寫檔案

>>> f = open('/users/michael/test.txt', 'w')

>>> f.write('hello, world!')

防止丟失使用with語句

with語句

with open('/users/michael/test.txt', 'w') as f:

f.write('hello, world!')

追加到檔案末尾

python IO程式設計,檔案讀寫

函式 open name mode buffering 引數 返回 乙個檔案物件 例項 mode引數 r 唯讀。w 寫,原內容被替換。a 在原內容後追加內容。buffering引數 無緩衝,直接將資料寫到硬碟上。有緩衝,資料先寫到記憶體裡,只有使用flush函式或者close函式才會將資料更新到硬碟...

Python io流的讀寫操作

自擬需求 將一段對話解析出來,並規範命名格式為 人名 序號 如下 在完善這個功能之前遇到兩個錯誤 1.unicodedecodeerror gbk codec can t decode byte 0xab in position 8 illegal multibyte sequence 這個是由於檔...

Python io 讀取檔案

python io 讀取檔案 1.open 使用open開啟檔案後一定要記得呼叫檔案物件的close 方法。比如可以用try finally語句來確保最後能關閉檔案。file object open thefile.txt try all the text file object.read fina...