一、with的使用
withwith方法可以在執行完子**後自動關閉檔案,節約記憶體空間。open('a.txt',mode='rt') as
f1:
res=f1.read()
print(res)
# f1=open('a.txt',mode='rt')
二、指定字元編碼
強調:t和b不能單獨使用,必須跟r/w/a連用
t文字(預設的模式)
1、讀寫都以str(unicode)為單位的
2、文字檔案
3、必須指定encoding=
'utf-8'
# 沒有指定encoding引數作業系統會使用自己預設的編碼三、檔案操作模式詳解# linux系統預設utf-8
# windows系統預設gbk
with
open('c.txt',mode='rt',encoding='utf-8') as
f:res=f.read()
# t模式會將f.read()讀出的結果解碼成unicode
print(res,type(res))
模式mode
操作若不存在
是否清空
r只能讀不能寫
報錯-
rb二進位制只讀報錯-
r+可讀可寫報錯是
rb+二進位制讀寫報錯是
w只能寫不能讀
建立檔案是wb
二進位制只寫
建立檔案是w+
可讀可寫
建立檔案
是wb+
二進位制讀寫
建立檔案是a
追加不能讀
建立檔案
否,追加寫
ab二進位制追加不能讀
建立檔案
否,追加寫
a+可讀可寫
建立檔案
否,追加寫
ab+二進位制追加可讀可寫
建立檔案
否,追加寫
唯讀模式
下面以文字模式為例
# 1、r(預設的操作模式):唯讀模式,當檔案不存在時報錯,當檔案存在時檔案指標跳到開始位置案例:使用存在硬碟內的賬戶資訊登入驗證with
open('c.txt',mode='rt',encoding='utf-8') as
f:res=f.read() # 把所有內容從硬碟讀入記憶體
print(res)
# 一次性讀完,若檔案較大會比較吃力
inp_username=input('your name>>: ').strip()
inp_password=input('your password>>: ').strip()
# 驗證
with
open('user.txt',mode='rt',encoding='utf-8') as
f:for
line
inf:
# 程式會迴圈多次若找到了對應的賬號密碼會退出,若迴圈結束了還沒找到,則登入失敗。
username,password=line.strip().split(':')
ifinp_username == username
andinp_password == password:
print('login successfull')
break
else:
print('賬號或密碼錯誤')
只寫模式
當檔案不存在時會建立空檔案,當檔案存在會清空檔案,指標位於開始位置with
open('d.txt',mode='wt',encoding='utf-8') as
f:f.read() # 報錯,不可讀
f.write('你好\n')
# 強調1:案例:w模式用來建立全新的檔案# 在以w模式開啟檔案沒有關閉的情況下,連續寫入,新的內容總是跟在舊的之後
with
open('d.txt',mode='wt',encoding='utf-8') as
f:f.write('你好1\n')
f.write('你好2\n')
f.write('你好3\n')
# 強調2:
# 如果重新以w模式開啟檔案,則會清空檔案內容
with
open('d.txt',mode='wt',encoding='utf-8') as
f:f.write('你好1\n')
with
open('d.txt',mode='wt',encoding='utf-8') as
f:f.write('你好2\n')
with
open('d.txt',mode='wt',encoding='utf-8') as
f:f.write('你好3\n')
檔案檔案的copy工具(文字檔案)
src_file=input('原始檔路徑》: ').strip()
dst_file=input('原始檔路徑》: ').strip()
with
open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as
f1,\
open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as
f2:res=f1.read()
f2.write(res)
# 1.使用者分別輸入檔案1和檔案2的路徑
# 2.先以唯讀的方式開啟檔案1,同時以只寫的方式開啟檔案2,將檔案1中的資料讀出並賦值給f1,再寫# 入到檔案2中。
a:只追加寫
# 只追加寫,在檔案不存在時會建立空文件,在檔案存在時檔案指標會直接調到末尾w 模式與 a 模式的異同:with open('e.txt',mode='at',encoding='utf-8') as f:
# f.read() # 報錯,不能讀
f.write('你好1\n')
f.write('你好2\n')
f.write('你好3\n')
相同點:在開啟的檔案不關閉的情況下,連續的寫入,新寫的內容總會跟在前寫的內容之後。
不同點:以 a 模式重新開啟檔案,不會清空原檔案內容,會將檔案指標直接移動到檔案末尾,新寫的內容永遠寫在最後。
案例:a模式用來在原有的檔案記憶體的基礎之上寫入新的內容,比如記錄日誌、註冊
註冊功能
name=input('請輸入使用者名稱:')
pwd=input('請輸入密碼:')
with
open('db.txt',mode='at',encoding='utf-8') as
f:f.write('{}:{}\n'.format(name,pwd))
+不能單獨使用,必須配合r、w、a
# r+with
open('g.txt',mode='rt+',encoding='utf-8') as
f:# print(f.read())
f.write('中國')
# w+with
open('g.txt',mode='w+t',encoding='utf-8') as
f:f.write('111\n')
f.write('222\n')
f.write('333\n')
print('====>',f.read())
# a+with
open('g.txt',mode='a+t',encoding='utf-8') as
f:print(f.read())
f.write('444\n')
f.write('5555\n')
print(f.read())
檔案 游標操作模式詳解
w 沒有檔案新建檔案,有檔案就清空檔案 w open 1.txt w encoding utf 8 w.write 000 n w.flush 在寫入大量資料,要及時處理記憶體空間,不然記憶體可能溢位導致資料丟失 w.write 111 n w.flush 最後一次flush 操作可以省略 w.wr...
python全棧 檔案操作模式詳解
with open a.txt mode rt encoding utf 8 as f1 print 第一次讀 center 50,res1 f1.read 把所有內容從硬碟讀入記憶體 print res1 with open c.txt mode rt encoding utf 8 as f1 p...
檔案操作模式
w open 1.txt w encoding utf 8 w 沒有檔案新建檔案,有檔案就清空檔案 w.write 000 n w.flush 在寫入大量資料,要及時處理記憶體空間,不然記憶體可能溢位導致資料丟失 w.write 111 n w.flush 最後一次flush 操作可以省略 w.wr...