19.文件操作(3)----操作文件

一.模式

模式 作用
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 文件路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章