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