1. 程式人生 > >python文件讀寫模式 --- r,w,a,r+,w+,a+,rb,wb

python文件讀寫模式 --- r,w,a,r+,w+,a+,rb,wb

相關 一行 例如 讀寫操作 http adl 相同 結果 內容

要了解文件讀寫模式,需要了解幾種模式的區別,以及對應指針

r : 讀取文件,若文件不存在則會報錯

w: 寫入文件,若文件不存在則會先創建再寫入,會覆蓋原文件

a : 寫入文件,若文件不存在則會先創建再寫入,但不會覆蓋原文件,而是追加在文件末尾

rb,wb:分別於r,w類似,但是用於讀寫二進制文件

r+ : 可讀、可寫,文件不存在也會報錯,寫操作時會覆蓋

w+ : 可讀,可寫,文件不存在先創建,會覆蓋

a+ :可讀、可寫,文件不存在先創建,不會覆蓋,追加在末尾

註意:這裏的覆蓋是指每次重新打開文件進行操作時覆蓋原來的,如果是在打開文件中則不會覆蓋


---------------------
作者:07151012
來源:CSDN
原文:https://blog.csdn.net/qq_32648375/article/details/83342094
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

# 打開文件進行操作
with open("a.txt","w") as file:
    file.write("123")
    file.write("456")
# 結果為 123456 雖然w操作模式會進行覆蓋,但是此時沒有
 
# 再次打開文件進行操作
with open("a.txt","w") as file:
    file.write("123")
# 結果為 123 此時才是覆蓋原來的a.txt

讀、寫操作時候涉及到指針

指針相關的函數有:seek(x[,y]),x設置指針的位置,y(=0開頭,=1中間,=2末尾)

tell(),查詢指針的位置

指針註意點:1.每次打開文件默認指針是在開頭的,可以通過seek()來設置指針的位置進行讀寫操作

2. 每次操作都是從當前指針指向位置向後進行讀寫

例如:使用w模式(覆蓋模式)進行寫入時,指針會從頭開始,寫入完,指針指向最後

with open("a.txt","w") as file:
    print(file.tell())      //0,寫入前指針為0
    file.write("123")       //寫入123
    print(file.tell())      //3,寫入後指針變為3
# a.txt為123
 
# 重新打開同一個a.txt文件
with open("a.txt","w") as file: print(file.tell()) //0,寫入前指針為0 file.write("456") //寫入456 print(file.tell()) //3,寫入後指針變為3 # a.txt為456

再來看看a模式(非覆蓋模式)

with open("b.txt","a") as file:
    print(file.tell())      //0,寫入前指針為0
    file.write("123")       //寫入123
    print(file.tell())      //3,寫入後指針變為3
# b.txt為123
 
# 重新打開同一個b.txt文件
with open("b.txt","a") as file:
    print(file.tell())      //3,寫入前指針為3
    file.write("456")       //寫入456
    print(file.tell())      //6,寫入後指針變為6
# b.txt為123456

所以只要知道指針的起始位置以及最後位置,就能知道文件讀取的內容

再來了解一下有關於文件讀的時候

read([value]):value為設置內容讀取的長度

舉個例子(與指針結合起來看)

# 首先我先創建一個a.txt文件,內容為12345678
 
with open("a.txt","r") as file:
    content = file.read(3)       // 讀取長度為3
    next_content = file.read()   // 第二次讀取
    print(content)               // 123
    print(next_content)          // 45678
 
 
# 為什麽第二次讀取的時候結果會是45678呢?
# 在同一個打開文件中,因為第一次讀取完,指針指向了3,所以再次讀取時候,從指針3開始讀取

再來將seek()函數引入,相同例子

# 首先我先創建一個a.txt文件,內容為12345678
 
with open("a.txt","r") as file:
    content = file.read(3)
    file.seek(1)                // 設置指針位置為1
    next_content = file.read()  // 第二次讀取
    print(content)              // 123
    print(next_content)         // 2345678
 
# 由於seek設置了指針為2,所以第二次讀取時候,從指針為2出進行讀取了

文件讀的操作相關還有readline,readlines,for in遍歷

顧名思義 readline就是讀取一行,readlines就是讀取所有行

文件較大時,可以用readline或for in 遍歷,節省內存,但是性能低

文件較大時,可以用read,readlines一次性處理,占用內存大,但是性能高

看了一下幾個例子就能理解了:

# 先創建一個多行的txt文件
  a.txt:123
        456  
 
# for in 方法
with open("a.txt","r") as file:
    for i in file:
        print(i,end="")     //由於每行末尾默認帶有換行符,所以end=""設置一下輸出樣式
 
// 結果為 123
          465
 
 
# readline 方法:每次讀取一行
with open("a.txt","r") as file:
    content = file.readline()  
    print(content,end="")      //123
    content1 = file.readline()
    print(content1,end="")     //456
 
 
# readlines 方法 
with open("a.txt","r") as file:
    lines = file.readlines()   // 讀取每一行
    for line in lines:         // 遍歷取出每一行
        print(line,end="") 
 
// 結果為 123
          465

以上內容來源於 https://blog.csdn.net/qq_32648375/article/details/83342094

python文件讀寫模式 --- r,w,a,r+,w+,a+,rb,wb