一.模式
模式 | 作用 |
---|---|
r | 只讀模式,文件不存在則報錯,文件存在時打開文件指針位於開始位置 |
w | 只寫模式,文件不存在創建空的新文件,文件存在清空文件指針位於開始位置 |
a | 只追加寫模式,文件不存在創建空的新文件,文件存在時指紋跳到末尾 |
r+ | 可讀可寫,性質與r類型,但可以寫 |
w+ | 可讀可寫,性質與w類似,但可以讀 |
a+ | 可讀可寫,性質與a類型,但可以讀 |
x | 只讀模式,文件存在會報錯,文件不存在會創建 |
1.r模式
r模式:只讀模式,文件不存在則報錯,文件存在時指針跳到開頭開始讀
示例代碼(1):
需求:用戶登錄,將用戶名密碼存到一個txt文件中,拿到用戶輸入的數據去文件中進行對比,並判斷結果
用戶數據如下:
代碼如下:
user_input = input("請輸入用戶名:")
password_input = input("請輸入密碼:")
with open(r'user&password.txt',mode="rt",encoding="UTF-8") as f:
flag = False
for line in f:
lst = line.strip().split(",")
if user_input == lst[0] and password_input == lst[1]:
flag = True
break
if flag:
print("登陸成功")
else:
print("用戶名或密碼錯誤")
2.w模式
w模式:只寫模式,文件不存在則會創建新的空文件,文件存在則會晴空文件,指針移動到文件開頭
示例代碼(1):
with open("b.txt",mode="wt",encoding="UTF-8") as f:
f.write("這是第一行數據")
f.write("這是第二行數據")
f.write("這是第三行數據")
#打開文件連續寫,新的內容跟在舊內容後邊
在文件中數據如下圖:
示例代碼(2)
with open("b.txt",mode="wt",encoding="UTF-8") as f:
f.write("這是第一行數據\n")
with open("b.txt", mode="wt", encoding="UTF-8") as f:
f.write("這是第二行數據\n")
with open("b.txt", mode="wt", encoding="UTF-8") as f:
f.write("這是第三行數據\n")
#連續打開文件寫,只會保留最後一次寫的內容
在文件數據如下圖:
示例代碼(3):
需求:根據用戶輸入的源文件路徑和新文件路徑,來複制一份文件
src_file = input("請輸入原文件路徑")
new_file = input("請輸入新文件路徑")
with open(r"{}".format(src_file),mode="rb") as f1,\
open(r"{}".format(new_file),mode="wb") as f2:
while True:
ret = f1.read(1024) #一次讀1024個字節,防止內存溢出
if not ret:
break
f2.write(ret)
3.a模式
a模式:文件不存在時,創建新文件,文件存在時打開文件指針跳到末尾
示例代碼(1):
需求:模仿一個用戶註冊的功能,獲取到用戶輸入的賬號密碼,對賬號進行對比,如果存在就提示用戶已存在,否則創建新用戶,將賬號密碼保存在文件中
user_input = input("請輸入用戶名:")
password_input = input("請輸入密碼:")
with open("db.txt",mode="rt",encoding="UTF-8") as f: #db.txt存放着用戶賬號和密碼
flag = False
for line in f:
if line.strip().split(":")[0] == user_input:
print("用戶名已存在")
flag = True
break
if not flag: #如果用戶不存在,將用戶賬號密碼寫入文件
with open("db.txt",mode="at",encoding="UTF-8") as f:
f.write("{}:{}\n".format(user_input,password_input))
4.+模式
1.r+模式測試
with open("m.txt",mode="rt+",encoding="UTF-8") as f:
pass
結果如下:
驗證了他與r模式性質相似
2.w+模式測試
with open("a.txt",mode="wt+",encoding="UTF-8") as f:
print(f.read()) #讀不到是因爲文件被清空了
f.write("哈哈哈") #指針移動到末尾
print(f.read()) #讀不到是因爲寫完文件後指針移動到末尾
結果如下:
什麼都沒有
3.a+模式測試
with open("a.txt",mode="at+",encoding="UTF-8") as f:
print("---->:",f.read()) #讀不到是因爲打開文件時指針移動到末尾
f.write("\n哼哼哈嘿\n")
print("---->:",f.read()) #讀不到是因爲寫完文件後指針移動到末尾
結果如下:
5. x模式
with open("c.txt",mode="x",encoding="UTF-8") as f:
f.write("xxx")
文件存在時:
文件不存在時會創建
二.方法和屬性
文件操作常用方法:
方法名 | 作用 |
---|---|
f.read(n) | 從文件指針當前位置開始讀,不指定n將文件讀完,指定n讀取指定字節或字符,文件指針移動到末尾 |
f.readline() | 每次讀取一行,文件指針移動到下一行行首 |
f.readlines() | 一次性將文件內容全部讀取出來,結果是list |
f.readable() | 文件是否可讀,結果爲bool |
f.write() | 寫入指定內容,寫入後文件指針移動到末尾 |
f.writelines() | 寫入多行內容,需要傳一個iterable對象 |
f.writeable() | 文件是否可寫,結果爲bool |
f.close() | 關閉文件 |
f.flush() | 刷新文件,將內存中的變化同步到硬盤中 |
f.encoding | 文件的解碼方式 |
f.closed | 文件是否關閉 |
f.name | 文件路徑 |