一、檔案處理流程
1.開啟檔案,得到檔案控制程式碼並賦值給一個變數 2.通過控制程式碼對檔案進行操作 3.關閉檔案 開啟模式: r 模式,預設模式,檔案不存在則報錯 w 模式,檔案不存在則建立,檔案存在則覆蓋 a 模式,檔案不存在則建立,檔案存在則不會覆蓋,寫內容會以追加的方式寫(寫日誌檔案的時候常用),追加模式是一種特殊的寫模式 b(rb,wb,ab)模式:二進位制模式,不用加encoding:utf-8
f=open('c.txt','rb') #只讀模式開啟c.txt檔案,控制程式碼為f
print(f.read()) #讀取整個文件
print(f.read().decode())
f=open('d.txt','wb') #二進位制只寫方式開啟d.txt
f.write('啦啦啦'.encode('utf-8'))
f.close()
複製程式碼
二、基本操作
1.檔案開啟模式 檔案控制程式碼=open('檔案路徑',‘模式’) 開啟檔案時,需要指定檔案路徑和以什麼方式開啟檔案。 開啟檔案的模式有: r ,只讀模式【預設模式,檔案必須存在,不存在則丟擲異常】 w,只寫模式【不可讀;不存在則建立;存在則清空內容】 x, 只寫模式【不可讀;不存在則建立,存在則報錯】 a, 追加模式【可讀; 不存在則建立;存在則只追加內容】 只讀模式
f=open(r'c.txt',encoding='utf-8')
print('====>1',f.read())
print('====>2',f.read())
print(f.readable())
print(f.readline(),end='')
print(f.readline())
print("="*20)
print(f.read())
print(f.readlines())
f.close()
複製程式碼
寫模式:檔案不存在則建立,檔案存在則覆蓋原有的
f=open("new.py",'w',encoding='utf-8')
f.write('1111111111\n')
f.writelines(['2222\n','2222548\n','978646\n'])
f.close()
複製程式碼
追加模式:檔案不存在則建立,檔案存在不會覆蓋,寫內容是追加的方式寫
f=open('new.py','a',encoding='utf-8')
f.write('nishishui\n')
f.writelines(['aa\n','bb\n'])
f.close()
複製程式碼
"+" 表示可以同時讀寫某個檔案
r+, 讀寫【可讀,可寫】 w+,寫讀【可讀,可寫】 x+ ,寫讀【可讀,可寫】 a+, 寫讀【可讀,可寫】
"b"表示以==位元組==的方式操作
rb 或 r+b wb 或 w+b xb 或 w+b ab 或 a+b ==注:以b方式開啟時,讀取到的內容是位元組型別,寫入時也需要提供位元組型別,不能指定編碼==
練習,利用b模式,編寫一個cp工具,要求如下: 既可以拷貝文字又可以拷貝視訊,圖片等檔案
## 二進位制讀模式
f=open('1.jpg','rb')
data=f.read()
print(data)
## 二進位制寫模式
f=open('2.jpg','wb')
f.write(data)
print(data)
複製程式碼
三、常用寫法
寫模式
with open('a.txt','w') as f:
  f.write('要寫入的資訊')
複製程式碼
拷貝操作
with open('a.txt','r') as rf,open('b.txt','w') as wf:
  data=read_f.read()
  write_f.write(data)
複製程式碼
四,檔案修改
import os
with open('a.txt','r',encoding='utf-8') as read_f,open('a.txt.swap','w',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
複製程式碼
五、檔案內游標移動
一: read(3): 1. 檔案開啟方式為文字模式時,代表讀取3個字元 2. 檔案開啟方式為b模式時,代表讀取3個位元組 二: 其餘的檔案內游標移動都是以位元組為單位如seek,tell,truncate ==注意:== 1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的 seek控制游標的移動,是以檔案開頭作為參照的。 tell當前游標的位置 2. truncate是截斷檔案,截斷必須是寫模式,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,所以truncate要在r+或a或a+等模式下測試效果
import time
with open('test.txt','rb') as f:
f.seek(0,2)
while True:
line=f.readline()
if line:
print(line.decode('utf-8'))
else:
time.sleep(0.2)
複製程式碼