python文件讀寫模式 --- r,w,a,r+,w+,a+,rb,wb
要了解文件讀寫模式,需要了解幾種模式的區別,以及對應指針
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