常見的讀寫操作:
站在用戶的角度思考問題,與客戶深入溝通,找到高平網(wǎng)站設(shè)計(jì)與高平網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋高平地區(qū)。
Python內(nèi)置了讀寫文件的函數(shù),用法和C是兼容的。本節(jié)介紹內(nèi)容大致有:文件的打開/關(guān)閉、文件對象、文件的讀寫等。僅示例介紹 TXT 類型文檔的讀寫,也就是最基礎(chǔ)的文件讀寫,也需要注意編碼問題;
open()?? close()???? with open(...) as ...
看以下示例就能了解 Python?的 open()?及?close()?函數(shù)。這邊調(diào)用 read()方法可以一次讀取文件的全部內(nèi)容,Python把內(nèi)容讀到內(nèi)存,用一個(gè)str對象表示,具體使用參見下文。
在 E 盤 python_file 文件夾下新建一 a.txt,輸入隨意,如下:
Python 操作 打開及關(guān)閉方式 如下:
注意 open() 之后 一定要 close()。但由于文件讀寫時(shí)都可能產(chǎn)生IOError,為了保證無論是否出錯(cuò)都能正確地關(guān)閉文件,我們用 try ... finally 來實(shí)現(xiàn):
python 簡化了改寫法,即用 with open(...) as ...? ; 建議之后文件讀寫都用該寫法:
上面,你肯定注意到了參數(shù) "r";該參數(shù)決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。
相關(guān)參數(shù):
File 對象
file 為一對象,它有一些內(nèi)置屬性,如下
file對象的屬性:
read()??? read(size)?? readline()?? readlines()
之前的例子已經(jīng)接觸到了 read() 函數(shù),該函數(shù)會(huì)會(huì)一次性讀取文件的全部內(nèi)容,如果能確保文件的大小,自然可以。但若文件過大,內(nèi)存就爆了,所以,可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個(gè)字節(jié)的內(nèi)容;也可調(diào)用 readline() 每次讀取一行內(nèi)容;而調(diào)用readlines()可以一次讀取所有內(nèi)容并按行返回list??傊?,根據(jù)需求來。僅以 txt 文件為例,其他的文件讀取需要特殊處理;另外,文件的格式編碼方式也需要注意;這邊僅介紹讀取方法,其他的會(huì)出專題來學(xué)習(xí)。
在D:\python_file 下新建 poet.txt;示例如下,由于一個(gè)中文會(huì)占多個(gè)字節(jié),故read(size) 部分會(huì)亂碼,如:
write()
寫文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時(shí),傳入標(biāo)識(shí)符'w'或者'wb'表示寫文本文件或?qū)懚M(jìn)制文件;'a' 對應(yīng)的表示追加等。
如下示例,由于 write.txt 文件不存在,創(chuàng)建該文件并寫入:
在上例基礎(chǔ)上,繼續(xù),該文件被重寫:
繼續(xù),這次使用追加,會(huì)在文件結(jié)尾追加:
open(filepath) :打開文件
open(filepath,'r') :打開方式,默認(rèn)是讀取
open(filepath).read() :讀取文件中的內(nèi)容
open(filepath).readline() :讀取文件中一行的內(nèi)容
open(filepath).readline()[1] :讀取文件中的內(nèi)容,返回值是列表。
open(filepath).close() :關(guān)閉文件
open(filepath).seek(0) :將光標(biāo)回到首位
with open()函數(shù),不用close()方法,默認(rèn)自動(dòng)關(guān)閉,所以需要制定一些規(guī)則.
文件內(nèi)建函數(shù)和方法:
open() : 打開文件
read() :輸入
readline() :輸入一行
seek() :文件內(nèi)移動(dòng)
write() :輸出
close() :關(guān)閉文件
1 文件讀取全文本操作
在一定場景下我們需要把文本全部內(nèi)容讀取出來,進(jìn)行處理。python提供三種函數(shù)讀取文件,分別是read readline readlines,
read():讀取文件的全部內(nèi)容,加上參數(shù)可以指定讀取的字符。
readline():讀取文件的一行。
readlines():讀取文件的所有行到內(nèi)存中。
不同場景下我們可以選擇不同函數(shù)對文件進(jìn)行讀取。
1.1 方法一
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt=file.read()
# 全文本的處理
file.close()
使用read函數(shù)將文件中的內(nèi)容全部讀取,放在字符串變量txt中。這樣操作適合于文本較小,處理簡單的情況,當(dāng)文件較大時(shí),這種方式處理時(shí)不合適的。一次性讀取較大的文件到內(nèi)存中,會(huì)耗費(fèi)較多的時(shí)間和資源。這時(shí)候分批處理效果更好。
1.2 方法二
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt= file.read(4)
# 文本的處理while txt != ""txt= file.read(4)
# 批量文本處理
file.close()
這種方法適合于分批處理文本信息,每次批量讀入,批量處理,不會(huì)對內(nèi)存造成較大的壓力。
1.3 方法三
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")for line infile.readlines():
# 處理每一行數(shù)據(jù)
file.close()
這種處理方式適合處理以行為分割特點(diǎn)的文本,并且文本較小,因?yàn)檫@種處理方式需要一次性把文件所有內(nèi)容讀取到內(nèi)存中。
1.4 方法四
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r") # 這里的file時(shí)文件句柄for line infile:
# 處理每一行數(shù)據(jù)
file.close()
這種方式和方法三中的區(qū)別是分行讀入,逐行處理,不會(huì)一次性把文件所有內(nèi)容都讀入到內(nèi)存中,對一些大文件的處理是很有效的。
2 文件寫入文本操作
文件寫入有兩種寫入函數(shù)和一種輔助支持。
write():向文件中寫入一個(gè)字符或者字節(jié)流
writelines():將一個(gè)元素全為字符串的列表寫入到文件中 需要注意的是,writelines寫入列表元素的時(shí)候會(huì)把列表元素的內(nèi)容拼接到一起寫入,不會(huì)有換行和空格 。
seek(): 輔助寫入函數(shù)offset偏移量參數(shù)代表含義如下
0 - 文件開頭
1 - 當(dāng)前位置
2 - 文件結(jié)尾
2.1 方法一
file_name = input("output.txt", "w+")
text= "hello world!"file_name.write(text)
file.close()
2.2 方法二
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.writelines(list)for line infile:
# 讀取寫入的數(shù)據(jù),這時(shí)候發(fā)現(xiàn)是沒有任何內(nèi)容的
file.close()
我們增加一行代碼就可以讀取到寫入的文件內(nèi)容,利用seek()函數(shù)調(diào)整寫操作指針的位置,可以實(shí)現(xiàn)寫操作之后的正常讀取。
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.readlines(list)
file_name.seek(0) # 調(diào)整寫的指針到文件的開始位置for line infile:
# 讀取寫入的數(shù)據(jù),這時(shí)候會(huì)讀出一行寫入的數(shù)據(jù)。
file.close()