1.檔案介紹
python操作檔案
1.python檔案的基本操作
開啟檔案關鍵字open
語法格式:open('檔案路徑','讀寫模式','字元編碼')
f = open('a.txt','r',encoding='utf-8')#開啟檔案
print(f.read())#操作檔案
f.close()#關閉檔案
2.with上下文管理器(with開啟檔案之後會自動關閉)
語法格式:with open(r'a.txt','r',encoding='utf-8') as f:
as f:就相當於你寫了一個f = open,只不過這個as替換了等於號,這個f(控制程式碼)就相當於一個變數名可以隨意更改
r 的作用:有時有你在填寫路徑的時候遇到反斜槓可能會發生轉義,這個時候字串最前面加上 r 來解決轉義的問題,
2.檔案的讀寫模式
1. r == read: 只讀,不能寫
with open(r'a.txt','r',encoding='utf-8') as f:
f.read()
#read()是有缺陷的,如果開啟檔案特別大的時候就會打不開,會很慢。會導致記憶體溢位,因為他開啟不會存在磁碟中,會先存在記憶體中
2. w ==write:只能寫,不能讀
with open(r'a.txt','w',encoding='utf-8') as f:
f.write('內容')
#如果路徑不存在,會新建一個檔案
#如果檔案存在,會先清空檔案中的內容,在進行寫內容,就算不寫東西用pass,也會清空,w模式就會直接清空
# w 模式只能寫string型別
3. a == apppen : 追加
with open(r'a.txt','a',encoding='utf-8') as f:
f.write('內容\n')
#如果路徑不存在,會新建一個檔案
#不會清空檔案內容,但是不會換行,需要自己在內容後面加\n
多行資料:括號裡不可能寫多行資料,需要多個write如下:
f.write('內容\n')
f.write('內容\n')
f.write('內容\n')
f.write('內容\n')
########r,w, a:只能讀寫檔案,不能讀寫影片音訊
3.檔案的操作方法
讀模式
with open(r'a.txt','a',encoding='utf-8') as f:
print(f.readline())#一次讀取一行,會自動換行
print(f.readlines())#把檔案內的資料按照每一行組裝成列表的模式
print(f.readable())#判斷是否可具備讀的條件,就是看這個檔案是否可讀,返回bool值
寫模式
with open(r'a.txt','a',encoding='utf-8') as f:
print (f.write())#直接清空資料,然後根據口號中的內容寫資料
print(f.writeable())#判斷是否具備寫的條件,返回bool值
print(f.writelines(['獻運好帥\n','獻運好帥\n','獻運好帥\n',]))#就是吧資料一行一行的給你去寫
檔案的操作最佳化
print(f.flush())#把記憶體中的資料立刻刷到硬碟中,因為你一開始寫的資料會儲存在記憶體中如果發生斷電資料會消失
"""檔案控制程式碼 f 支援for迴圈"""
with open(r'a.txt','a',encoding='utf-8') as f:
for line in f :
print(line)#把檔案裡面的資料一行一行列印,以後讀取檔案的時候都要用for迴圈一行一行的去讀取
4.檔案的操作模式
r. w. a. 模式
1. 只能操作文字
2. 都是以字串為單位
3. r,w,a,原先的寫法是rt,wt,at,如果是隻操作文字這個t可以省略
b模式:二進位制
1.能操作任何的資料型別,eg:文字,音訊,視屏
2.寫法:rb ab wb :此時的b不能省略
3.b模式的情況下encoding引數不能寫,因為他都是字元編碼的模式了encoding就沒用了
rb:
with open(r'a.jpeg','rb') as f:#b模式的話字元編碼就不要了
print(f.read())#列印出一推二進位制數
wb:
with open(r'a.jpeg','rb',encoding='utf-8') as f:
f.write(b'你好')#你好前面必須加上b才可以列印出,不然出來的是亂碼註釋第一種編碼方式
s.'你好'
f.write(s.encode(utf8))#這是第二種編碼方式
"""wb寫進去了也必須rb來讀,然後後面還需要跟上decode去解碼
print(f.read().decode('utf8'))
"""
按照字元或位元組讀取:要注意他讀取的資料大小
with open(r'a.txt','a',encoding='utf-8') as f:
print(f.read(1))#當 r 模式下,read括號裡面的數字代表的是字元,但是在 b 模式下read後面括號裡面的代表的是位元組