Python 搞懂檔案讀寫

2021-10-23 07:47:49 字數 3514 閱讀 6698

i/o在計算機中是指input/output,也就是stream(流)的輸入和輸出。這裡的輸入和輸出是相對於記憶體來說的,input stream(輸入流)是指資料從外(磁碟、網路)流進記憶體,output stream是資料從記憶體流出到外面(磁碟、網路)。程式執行時,資料都是在記憶體中駐留,由cpu這個超快的計算核心來執行,涉及到資料交換的地方(通常是磁碟、網路操作)就需要io介面。

作業系統是個通用的軟體程式,其通用目的如下

檔案讀寫就是一種常見的io操作。那麼根據上面的描述,可以推斷python也應該封裝作業系統的底層介面,直接提供了檔案讀寫相關的操作方法。

我們將資料寫入檔案時,作業系統不會立刻把資料寫入磁碟,而是先把資料放到記憶體緩衝區非同步寫入磁碟。當呼叫close方法時,作業系統會保證把沒有寫入磁碟的資料全部寫到磁碟上,否則可能會丟失資料,所以,*檔案讀寫操作完成後,應該及時關閉*

1)開啟檔案,獲取檔案描述符

2)操作檔案描述符–讀/寫

3)關閉檔案

檔案開啟模式描述r

以唯讀模式開啟檔案,並將檔案指標指向檔案頭;如果檔案不存在會報錯

w以只寫模式開啟檔案,並將檔案指標指向檔案頭;如果檔案存在則將其內容清空,如果檔案不存在則建立

a以只追加可寫模式開啟檔案,並將檔案指標指向檔案尾部;如果檔案不存在則建立

r+在r的基礎上增加了可寫功能

w+在w的基礎上增加了可讀功能

a+在a的基礎上增加了可讀功能

b讀寫二進位制檔案(預設是t,表示文字),需要與上面幾種模式搭配使用,如ab,wb, ab, ab+(posix系統,包括linux都會忽略該字元)

r+,w+,a+區別:

初級:

# 第一步:(以唯讀模式)開啟檔案

f =open

('song.txt'

,'r'

, encoding=

'utf-8'

)# 第二步:讀取檔案內容

print

(f.read())

# 第三步:關閉檔案

f.close(

)

中級:

f =

''try

: f =

open

('song.txt'

,'r'

, encoding=

'utf-8'

)print

(f.read())

num =10/

0finally

:print

('>>>>>>finally'

)if f:

f.close(

)

最佳:

with語句會在其**塊執行完畢之後自動關閉檔案。

with

open

('song.txt'

,'r'

, encoding=

'utf-8'

)as f:

print

(f.read())

print

(f.closed)

方法

描述read()

一次讀取檔案所有內容,返回乙個str

read(size)

每次最多讀取指定長度的內容,返回乙個str;在python2中size指定的是位元組長度,在python3中size指定的是字元長度

readlines()

一次讀取檔案所有內容,按行返回乙個list

readline()

每次只讀取一行內容

此外,還要兩個與檔案指標位置相關的方法

方法描述

seek(n)

將檔案指標移動到指定位元組的位置

tell()

獲取當前檔案指標所在位元組位置

with

open

('song.txt'

,'r'

, encoding=

'utf-8'

)as f:

print

(f.read(12)

)

with

open

('song.txt'

,'r'

)as f:

print

(f.readline(

).decode(

'utf-8'

))

3.遍歷列印乙個檔案中的每一行

方式一:先一次性讀取所有行到記憶體,然後再遍歷列印

with

open

('song.txt'

,'r'

, encoding=

'utf-8'

)as f:

for line in f.readlines():

print

(line)

這種方式的缺點與read()方法是一樣的,都是會消耗大量的記憶體空間。

方式二:通過迭代器一行一行的讀取並列印

with

open

('song.txt'

,'r'

, encoding=

'utf-8'

, newline='')

as f:

for line in f:

print

(line)

file類的其他方法:方法

描述flush()

重新整理緩衝區資料,將緩衝區中的資料立刻寫入檔案

next()

返回檔案下一行,這個方法也是file物件例項可以被當做迭代器使用的原因

truncate([size])

擷取檔案中指定位元組數的內容,並覆蓋儲存到檔案中,如果不指定size引數則檔案將被清空; python2無返回值,python3返回新檔案的內容位元組數

write(str)

將字串寫入檔案,沒有返回值

writelines(sequence)

向檔案寫入乙個字串或乙個字串列表,如果字串列表中的元素需要換行要自己加入換行符

fileno()

返回乙個整型的檔案描述符,可以用於一些底層io操作上(如,os模組的read方法)

isatty()

判斷檔案是否被連線到乙個虛擬終端,是則返回true,否則返回false

encoding(編碼)引數的預設值是與平台有關的,比如window上預設字元編碼為gbk,linux上預設字元編碼為utf-8。

decoding(解碼)

前面花了幾天時間複習python基礎語法和物件導向知識,現在開始除了每天上網課外,就會抽時間深入學習python相關知識,繼續加油,奧里給!!

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