python檔案的開啟與修改——day9
一. 基本介紹
控制檔案讀寫操作的模式
r(預設)
w
a
控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)
t(預設)
b
控制檔案讀寫操作的模式
二.詳細介紹
1. r(預設):只讀模式,以該模式開啟檔案,當檔案不存在時則報錯,當檔案存在時檔案指標在檔案開頭
with open('a.txt',mode='rt',encoding='utf-8') as f:
print(f.readline()) #讀取檔案中的第一行
print(f.readline2()) #讀取檔案左右資訊,轉成列表模式
1.1 換行符
print(line,end='')
2. w:只寫模式,以該模式開啟檔案,當檔案不存在時建立一個空文件,當檔案存在時清空檔案內容檔案指標在檔案開頭。
with open('a.txt',mode='wt',encoding='utf-8') as f:
print(f.readable()) #判斷檔案是否可讀
print(f.writable()) #判斷檔案是否可寫
2.1 在開啟檔案不關閉的情況下,連續的寫入,新的內容總是跟在老內容之後
f.write('你瞅啥\n')
f.write('瞅你那熊樣\n')
f.write('巴拉巴拉。。。\n')
2.2 列表內容迴圈新增入檔案中
lines=['1111\n','2222\n','3333\n']
f.writelines(lines) #列表內容迴圈新增入檔案中
3. 只追加寫入模式,以改模式開啟檔案,當檔案不存在時建立一個空文件,當檔案存在時不清空檔案內容,檔案指標跳到檔案末尾。
with open('c.txt',mode='at',encoding='utf-8') as f:
f.write('要新增的內容\n')
4. 控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)
t(預設):無論讀寫都是以字元為單位,只能操作文字檔案,必須制定encoding引數
b:無論讀寫都是以bytes(位元組)為單位,可以操作所有檔案,一定不能制定encoding引數
with open('01.mp4',mode='rb') as f:
with open('a.txt',mode='wb') as f:
f.write('輸入的內容'.encode('utf-8')) #要在b模式下修改txt檔案必須加.encode('utf-8')
5.
+:不能單獨使用,必須與rwa連用,r+、w+、a+
with open('a.txt','r+t',encoding='utf-8') as f:
print(f.readable()) #這時檔案可以讀也可以寫
print(f.writable())
6. 檔案修改的兩種方式
6.1 (1)以讀的方式開啟原始檔
(2)將檔案內容一次性全讀入記憶體,在記憶體完場修改
(3)以寫的方式開啟原始檔,然後將修改的結果一次性寫入原始檔
總結:
優點:在檔案修改過程中硬碟只存在一份資料
缺點:浪費記憶體
with open('b.txt',mode='rt',encoding='utf-8') as f1: #從檔案中值取出付給f1
msg=f1.read() #把f1取的值賦給msg
new_msg=msg.replace('alex','大SB') #把msg的alex該為大SB 付給new_msg
with open('b.txt',mode='wt',encoding='utf-8') as f2:
f2.write(new_msg) #把new_msg的值寫到檔案裡
6.2 (1)以讀的方式開啟原始檔,以寫的方式開啟一個臨時檔案
(2)讀取原始檔的一行內容到記憶體中,將修改的結果寫入臨時檔案
(3)刪除原始檔,將臨時檔案從命名為原始檔名
優點:同一時間在記憶體中只有檔案的一行內容,更節省記憶體
缺點:在檔案修改過程中硬碟只存在兩份資料
import os #import 呼叫模組 功能集合體 os
with open('b.txt',mode='rt',encoding='utf-8') as read_f,\
open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line.replace('大SB','alex'))
os.remove('b.txt') #刪除原始檔
os.rename('.b.txt.swap','b.txt') #修改檔名
瞭解
f.seek(10) #.seek 移動游標到 10 bytes
f.write('你好啊') #輸入你好啊
#注意:如果是中文要佔3個位元組 就可能出現亂碼