python基礎:檔案操作
一、檔案介紹
1、什麼是檔案
狹義說:文字檔案;廣義說:超文字檔案, 圖片,聲音,超連結,視訊。
2、檔案的分類
檔案大體上可以分為兩類,檔案檔案和二進位制檔案。
3、檔案的作用
使用檔案的目的是把一些資料儲存存放起來。
4、使用檔案的流程
我們操作一個檔案的流程一般是 開啟檔案,讀寫檔案,關閉檔案。通過程式操作檔案的流程也是這三步,首先開啟檔案,然後讀寫檔案,最後關閉檔案。
二、讀寫檔案簡單操作
1、讀取檔案
file 變數名 ---> 檔案控制代碼,檔案物件 file=open('a.txt',mode='r') ret=file.read() #將檔案中所有內容一次性讀取出來 # 最後要關閉檔案 print(ret) file.close()
file叫做檔案控制代碼(變數)用來操作檔案
第一個引數是檔案的路徑,
第二個引數 mode=訪問檔案的模型,r 表示讀,預設也是r 模式
2、寫檔案
file=open('file/c.txt',mode='w')
file.write('abcdef')
file.close()
mode=‘w’ 表示寫檔案
注意:如果檔案不存在,會自動建立檔案(不會建立目錄)。
三、檔案許可權
讀取操作
r 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。一般用於非文字檔案如圖片等。
r+ 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+ 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。一般用於非文字檔案如圖片等。
寫操作
w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。
w+ 開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
wb+ 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。一般用於非文字檔案如圖片等。
追加操作
a 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+ 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
rb操作二進位制檔案
file=open('file/...',mode='rb')
ret=file.read()
print(ret)
file.close()
r+ 讀寫模式
如果文佳不存在r+模式不能自動建立檔案
b.txt檔案內容是 abcde
file=open('file/b.txt',mode='r+')
# 先寫入
file.write('xxxx') #會從頭開始覆蓋對應長度的內容,游標移動到覆蓋內容後
# 後讀取
ret=file.read() #此時檔案內容變為xxxxe,游標在e之前
print(ret) #e
w+開啟一個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。
b.txt檔案內容是 abcde
file=open("file/b.txt",mode='w+')
import time
time.sleep(5)
ret=file.read() #讀的時候先清空在讀
print(ret) 此時b.txt已經被清空,不會讀取任何內容
# 先寫再讀
file=open("file/b.txt",mode='w+')
file.write('abcde') 在b.txt中加入了
position=file.tell()
print(position) 5
a模式
mode='a’表示往檔案末尾寫內容,不會刪除內容,不能執行讀的操作
file=open('file/a.txt',mode='a')
file.write('xxx')
ret=file.read()
#print(ret) #只能寫不能讀
file.close()
ab 二進位制:abc
以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,
檔案指標將會放在檔案的結尾。也就是說,新的內容將會
被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
b.txt為空檔案
file=open('file/b.txt',mode='ab')
file.write('abc'.encode()) b.txt中添加了 abc
#ret=file.read() 此方法為新增操作,無法讀取
#print(ret)
file.close()
檔案拷貝
file1=open('file/a.txt')
file2=open('file/c.txt')
ret1=file1.read()
file2.write(ret1) 將a.txt讀出來寫入b.txt
讀操作:
readline()
readline每次讀取一行,並且自帶換行功能 每一行末尾會讀到\n
readlines()
Readlines,一次性以行的形式讀取檔案的所有內容並返回一個list,需要去遍歷讀出來
迴圈讀取
file控制代碼是一個可迭代的物件因此,可以迴圈讀取檔案中的內容,每次讀一行。
寫操作:
writelines()
file.writelines(seq) #把seq的內容全部寫到檔案中(多行一次性寫入)。
tell()
tell獲取檔案當中當前游標所在的位置
file=open('file/b.txt',mode='ab')
file.write('abc'.encode())
ret=file.tell()
print(ret) #6
在b.txt原有內容後添加了abc,此時游標移動到所有內容之後
file.close()
(3).seek()
seek移動游標位置
引數:
offset 移動的長度(位元組)
whence 相對位置 0從開頭(預設),1從當前,2從末尾
file=open('file/b.txt',mode='ab')
file.write('abc'.encode())
ret=file.tell()
print(ret) #9
ret1=file.seek(0,0) 此時游標移動到開頭
print(ret1) #0
file.close()
r模式下:
注意:r模式下,相對位置必須為0,不支援非0操作
file=open(‘b.txt’,mode=‘r’)
ret=file.read(3) #abc
print(ret)
file.seek(0,1) #r模式下,相對位置必須為0,不支援非0操作
file.seek(0,2) #跳到末尾
print(file.read(3)) #游標此時已經調到末尾,將不會讀取任何內容
file.close()
rb模式下:
file=open('b.txt',mode='rb')
ret=file.read(3) #b'abc' 開頭的abc
print(ret)
file.seek(-3,2)
print(file.read(3)) #b'abc' 末尾的abc
file.close()
.name和mode
file.name 返回 路徑
file.mode 返回 檔案讀寫模式
file=open('b.txt',mode='rb')
print(file.name) #返回 路徑 b.txt
print(file.mode) #返回 檔案讀寫模式 rb
file.close()
亂碼問題:
讀寫操作的編碼不一致導致亂碼。
預設編碼是操作平臺編碼(gbk)
encodeing=’’ 指定編碼格式
with open('file/c.txt',mode='w',encoding='utf-8') as f:
f.write('你好,世界')
print(f)
with open('file/c.txt',mode='r',encoding='utf-8') as f:
ret=f.read()
print(ret) # 你好世界