檔案操作模式詳解

2022-08-18 05:00:11 字數 4142 閱讀 2419

一、with的使用

with

open('a.txt',mode='rt') as

f1:

res=f1.read()

print(res)

# f1=open('a.txt',mode='rt')

with方法可以在執行完子**後自動關閉檔案,節約記憶體空間。

二、指定字元編碼

強調: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模式開啟檔案沒有關閉的情況下,連續寫入,新的內容總是跟在舊的之後

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')

案例:w模式用來建立全新的檔案

檔案檔案的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:只追加寫

# 只追加寫,在檔案不存在時會建立空文件,在檔案存在時檔案指標會直接調到末尾

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')

w 模式與 a 模式的異同:

相同點:在開啟的檔案不關閉的情況下,連續的寫入,新寫的內容總會跟在前寫的內容之後。

不同點:以 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...