Python open()函數用法詳解


一、文件操作的流程:

#1. 打開文件,得到文件句柄並賦值給一個變量
#2. 通過句柄對文件進行操作
#3. 關閉文件

具體步驟如下:

f=open('test.txt',encoding='utf-8')   #打開文件
data=f.read()            #文件操作
print(data)
f.close()          #關閉文件

二、open()函數的具體用法:

open函數最常用的使用方法如下:文件句柄 = open('文件路徑', '模式',編碼方式)。

1、關於文件路徑

#文件路徑:主要有兩種,一種是使用相對路徑,想上面的例子就是使用相對路徑。
#另外一種就是絕對路徑,像' C:/Users/shu/Desktop/python/test.txt'

2、關於打開模式:

# r    以只讀方式打開文件。這是默認模式。文件必須存在,不存在拋出錯誤
#rb    以二進制格式打開一個文件用於只讀。
#r+    打開一個文件用於讀寫。文件指針將會放在文件的開頭。讀完就追加。
#w    打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
#w+    打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
#a    打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。
#a+    打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。

注:后面有帶b的方式,不需要考慮編碼方式。有帶+號的,則可讀可寫,不過它們之間還是有區別的

下面附上各種方法的代碼,便於更深刻理解各種模式:

#原來文件內容是:
自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.

1.只讀模式r:
f=open('test.txt','r')
data=f.read()
print(data)           #自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.
f.close() 

2.只寫模式,w  (存在會覆蓋原來內容)
f=open('test.txt','w')
f.write('作者:倉央嘉措')
f.close()              #寫完后原來的內容全都不見了,只剩下'作者:倉央嘉措'.

3、追加模式,a
f=open('test.txt','a')
f.write('作者:倉央嘉措')
f.close()              #寫完內容如下:自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.作者:倉央嘉措

4、以r+模式打開
f=open('test.txt','r+')
f.write('作者:倉央嘉措')
print(f.read())         # 輸出為" ,入山又怕誤傾城.世間安得雙全法,不負如來不負卿."         
f.close()            
#寫完內容為 “ 作者:倉央嘉措,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.”
#為什么輸出和寫完內容會這樣呢? 解釋這個只要知道緊跟光標的位置就可以明白了。
  首先,以r方式打開光標都會在最開始的位置,這時候執行f.write('作者:倉央嘉措') ,這時候就把原來的‘自恐多情損梵行’覆蓋了。這時候光標移動到','之前,
緊接着進行print(f.read())。就會把后面剩下的文本內容打印出來。所以輸出就是:" ,入山又怕誤傾城.世間安得雙全法,不負如來不負卿." 整個程序完成后,
整個文本內容就成了;“ 作者:倉央嘉措,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.”(光標!!)
View Code

 

 

 3、關於編碼方式:

#1.win系統默認是gbk編碼的,所以桌面生成的TXT之類的都是gbk編碼的。
#2.出現亂碼正常都是原文件的編碼方式和打開指定的編碼不一致所致

 

 三、關閉文件:

  不要小看這一步,因為我們讀取文件是把文科讀取到內存中的,如果我們沒關閉它,它就會一直占用系統資源,而且還可能導致其他不安全隱患。還有一種方法可以讓我們不用去特意關注關閉文件。那就是 with open()

 

with open('test.txt','a+') as f:
    f.write('作者:倉央嘉措')
    print(f.read())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM