不是python中文件操作的相關(guān)函數(shù)是load。根據(jù)查詢相關(guān)資料信息顯示,open在python是打開函數(shù),read和write在python是文件讀寫函數(shù),load用于從json文件中讀取數(shù)據(jù),不是python中文件的相關(guān)函數(shù)。
成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計與策劃設(shè)計,路北網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:路北等地區(qū)。路北做網(wǎng)站價格咨詢:18980820575
文件對象(open() 函數(shù)的返回值)提供了read()函數(shù)可以按字節(jié)或字符讀取文件內(nèi)容,到底是讀取字節(jié)還是字符,取決于使用 open() 函數(shù)打開文件時,是否使用了 b 模式,如果使用了 b 模式,則每次讀取一個字節(jié);反之,則每次讀取一個字符。
read() 函數(shù)的基本語法格式如下:
file.read([size])
其中,file 表示打開的文件對象;size 作為一個可選參數(shù),用于指定要讀取的字符個數(shù),如果省略,則默認(rèn)一次性讀取所有內(nèi)容。
【例 1】采用循環(huán)讀取整個文件的內(nèi)容。
# a.txt 文件內(nèi)容為:C語言中文網(wǎng)
f = open("a.txt", 'r', True)
while True:
# 每次讀取一個字符
ch = f.read(1)
# 如果沒有讀到數(shù)據(jù),跳出循環(huán)
if not ch:
break
# 輸出ch
print(ch, end='')
f.close()
運(yùn)行結(jié)果為:
C語言中文網(wǎng)
上面程序采用循環(huán)依次讀取每一個字符(因為程序沒有使用 b 模式),每讀取到一個字符,程序就輸出該字符。
正如從上面程序所看到的,當(dāng)程序讀寫完文件之后,推薦立即調(diào)用 close() 方法來關(guān)閉文件,這樣可以避免資源泄露(后續(xù)章節(jié)會詳細(xì)介紹 close() 函數(shù))。
注意,在調(diào)用 read() 函數(shù)讀取文件內(nèi)容時,成功讀取的前提是在 open() 函數(shù)中使用 r 或 r+ 的模式打開文件,否則(比如將上面程序中 open()的打開模式改為 w),程序會拋出io.UnsupportedOperation異常:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 4, in
ch = f.read(1)
io.UnsupportedOperation: not readable
【例 2】調(diào)用 read() 方法時不傳入?yún)?shù),該方法默認(rèn)會讀取全部文件內(nèi)容。例如:
f = open("a.txt", 'r', True)
# 直接讀取全部文件
print(f.read())
f.close()
運(yùn)行結(jié)果為:
C語言中文網(wǎng)
read()函數(shù)拋出UnicodeDecodeError異常的解決方法
當(dāng)使用 open() 函數(shù)打開文本文件時,默認(rèn)會使用當(dāng)前操作系統(tǒng)的字符集,比如 Windows 平臺,open() 函數(shù)默認(rèn)使用 GBK 字符集。因此,上面程序讀取的 a.txt 也必須使用 GBK 字符集保存;否則,程序就會出現(xiàn)UnicodeDecodeError錯誤。
如果要讀取的文件所使用的字符集和當(dāng)前操作系統(tǒng)的字符集不匹配,則有兩種解決方式:
使用二進(jìn)制模式讀取,然后用 bytes 的 decode() 方法恢復(fù)成字符串。
利用 codecs 模塊的 open() 函數(shù)來打開文件,該函數(shù)在打開文件時允許指定字符集。
例如,下面程序使用二進(jìn)制模式來讀取文本文件:
# 指定使用二進(jìn)制方式讀取文件內(nèi)容,a.txt 以 utf-8 編碼存儲
f = open("a.txt", 'rb', True)
# 直接讀取全部文件,并調(diào)用bytes的decode將字節(jié)內(nèi)容恢復(fù)成字符串
print(f.read().decode('utf-8'))
f.close()
上面程序在調(diào)用 open() 函數(shù)時,傳入了 rb 模式,這表明采用二進(jìn)制模式讀取文件,此時文件對象的 read() 方法返回的是 bytes 對象,程序可調(diào)用 bytes 對象的 decode() 方法將它恢復(fù)成字符串。由于此時讀取的 a.txt 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢復(fù)字符串時顯式指定使用 UTF-8 字符集。
下面程序使用 codes 模塊的 open() 函數(shù)來打開文件,此時可以顯式指定字符集:
import codecs
# 指定使用utf-8 字符集讀取文件內(nèi)容
f = codecs.open("a.txt", 'r', 'utf-8', buffering=True)
while True:
# 每次讀取一個字符
ch = f.read(1)
# 如果沒有讀取到數(shù)據(jù),則跳出循環(huán)
if not ch : break
# 輸出ch
print (ch, end='')
f.close()
上面程序在調(diào)用 open() 函數(shù)時顯式指定使用 UTF-8 字符集,這樣程序在讀取文件內(nèi)容時就完全沒有問題了。
常見的讀寫操作:
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)存,用一個str對象表示,具體使用參見下文。
在 E 盤 python_file 文件夾下新建一 a.txt,輸入隨意,如下:
Python 操作 打開及關(guān)閉方式 如下:
注意 open() 之后 一定要 close()。但由于文件讀寫時都可能產(chǎn)生IOError,為了保證無論是否出錯都能正確地關(guān)閉文件,我們用 try ... finally 來實現(xiàn):
python 簡化了改寫法,即用 with open(...) as ...? ; 建議之后文件讀寫都用該寫法:
上面,你肯定注意到了參數(shù) "r";該參數(shù)決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。
相關(guān)參數(shù):
File 對象
file 為一對象,它有一些內(nèi)置屬性,如下
file對象的屬性:
read()??? read(size)?? readline()?? readlines()
之前的例子已經(jīng)接觸到了 read() 函數(shù),該函數(shù)會會一次性讀取文件的全部內(nèi)容,如果能確保文件的大小,自然可以。但若文件過大,內(nèi)存就爆了,所以,可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個字節(jié)的內(nèi)容;也可調(diào)用 readline() 每次讀取一行內(nèi)容;而調(diào)用readlines()可以一次讀取所有內(nèi)容并按行返回list??傊?,根據(jù)需求來。僅以 txt 文件為例,其他的文件讀取需要特殊處理;另外,文件的格式編碼方式也需要注意;這邊僅介紹讀取方法,其他的會出專題來學(xué)習(xí)。
在D:\python_file 下新建 poet.txt;示例如下,由于一個中文會占多個字節(jié),故read(size) 部分會亂碼,如:
write()
寫文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時,傳入標(biāo)識符'w'或者'wb'表示寫文本文件或?qū)懚M(jìn)制文件;'a' 對應(yīng)的表示追加等。
如下示例,由于 write.txt 文件不存在,創(chuàng)建該文件并寫入:
在上例基礎(chǔ)上,繼續(xù),該文件被重寫:
繼續(xù),這次使用追加,會在文件結(jié)尾追加:
Python處理兩種不同類型的文件:二進(jìn)制文件和文本文件。了解兩者之間的差異很重要,因為它們的處理方式不同。
二進(jìn)制文件
在正常計算機(jī)使用期間使用的大多數(shù)文件實際上是二進(jìn)制文件,而不是文本。比如:Microsoft Word .doc文件實際上是一個二進(jìn)制文件,即使它只有文本。
二進(jìn)制文件的其他示例包括:
圖像文件,包括.jpg,.png,.bmp,.gif,等。
數(shù)據(jù)庫文件包括.mdb,.frm和.sqlite
文件,包括.doc,.xls,.pdf或者其他文件。
那是因為這些文件都有特殊處理的要求,需要特定類型的軟件來打開它。例如,您需要Excel來打開.xls文件,并使用數(shù)據(jù)庫程序來打開.sqlite文件。
文本文件
一方面,沒有特定的編碼,可以通過沒有任何特殊處理的標(biāo)準(zhǔn)文本編輯器打開。但是,每個文本文件都必須遵守一組規(guī)則:
文本文件必須是可讀的。他們可以(并且經(jīng)常會)包含許多特殊編碼,尤其是在HTML或其他標(biāo)記語言中,但您仍然可以說出它的含義
文本文件中的數(shù)據(jù)按行組織。在大多數(shù)情況下,每一行都是一個獨(dú)特的元素,無論是指令行還是命令。
此外,文本文件在每行的末尾都有一個看不見的字符,這使文本編輯器知道應(yīng)該有一個新行。通過編程與這些文件交互時,您可以利用該字符。在Python中,它用“ n” 表示。
在哪里可以找到Python的文件I / O工具
在Python中工作時,您不必?fù)?dān)心導(dǎo)入任何特定的外部庫來處理文件。Python附帶有“文件庫”,文件I / O工具和實用程序是核心語言的內(nèi)置部分。
但是在其他語言(如C ++)中,要處理文件,您必須通過包含正確的頭文件來啟用文件I / O工具#include fstream。如果您使用Java編寫代碼,則需要使用該import java.io.*語句。
使用Python,就沒有必要這樣做,這是因為Python有一組內(nèi)置函數(shù),可以處理讀取和寫入文件所需的所有內(nèi)容。
在python中,定義一個函數(shù)要使用def語句,依次寫出函數(shù)名、括號、括號中的參數(shù)和冒號:,然后在縮進(jìn)塊中編寫函數(shù)體,函數(shù)的返回值用return語句返回
def 函數(shù)名([參數(shù)1,參數(shù)2,...,參數(shù)n]):
函數(shù)體
函數(shù)代碼以def關(guān)鍵詞開頭,后接函數(shù)標(biāo)識符名稱和圓括號():
任何傳入?yún)?shù)和自變量必須放在圓括號中間,圓括號之間可以用于定義參數(shù)
函數(shù)的第一行語句可以選擇性的使用文檔字符串-用于存放函數(shù)說明
函數(shù)內(nèi)容以冒號起始,并且縮進(jìn)
return[表達(dá)式]結(jié)束函數(shù),選擇性的返回一個值給調(diào)用方,不帶表達(dá)式的return相當(dāng)于返回None
新聞名稱:python中的讀寫函數(shù) python文件讀寫方法
標(biāo)題URL:http://chinadenli.net/article26/dodcpcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、ChatGPT、手機(jī)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站維護(hù)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)