一、文件處理基本形式 二、打開文件的模式 三、操作文件的方法 ...
一、文件處理基本形式
# 1. 打開文件,得到文件句柄並賦值給一個變數 # 文件句柄 = open('文件路徑', '模式', '操作文件的字元編碼') f = open('carter', 'r', encoding='UTF-8') # 預設打開模式就為r # 2. 通過句柄對文件進行操作 data = f.read() print(data) # 3. 關閉文件 f.close() # 回收操作系統的資源
二、打開文件的模式
1. 打開文件的模式有(預設為文本模式):
r ,只讀模式【預設模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則創建;存在則清空內容】 a, 之追加寫模式【不可讀;不存在則創建;存在則只追加內容】 2. 對於非文本文件,我們只能使用b模式,"b"表示以位元組的方式操作(而所有文件也都是以位元組的形式存儲的,使用這種模式無需考慮文本文件的字元編碼、圖片文件的jgp格式、視頻文件的avi格式)
rb wb ab 註:以b方式打開時,讀取到的內容是位元組類型,寫入時也需要提供位元組類型,不能指定編碼 3. 瞭解部分
"+" 表示可以同時讀寫某個文件 r+, 讀寫【可讀,可寫】 w+,寫讀【可讀,可寫】 a+, 寫讀【可讀,可寫】 x, 只寫模式【不可讀;不存在則創建,存在則報錯】 x+ ,寫讀【可讀,可寫】 xb
三、操作文件的方法
f.read() #讀取所有內容,游標移動到文件末尾 f.readline() #讀取一行內容,游標移動到第二行首部 f.readlines() #讀取每一行內容,存放於列表中 f.write('1111\n222\n') #針對文本模式的寫,需要自己寫換行符 f.write('1111\n222\n'.encode('utf-8')) #針對b模式的寫,需要自己寫換行符 f.writelines(['333\n','444\n']) #文件模式 f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式 #瞭解 f.readable() #文件是否可讀 f.writable() #文件是否可讀 f.closed #文件是否關閉 f.encoding #如果文件打開模式為b,則沒有該屬性 f.flush() #立刻將文件內容從記憶體刷到硬碟 f.name
小練習
while True: msg = """\n\033[0;34m1 註冊\n2 查看\033[0m """ print(msg) choice = input('\033[31;0m請輸入編號>>:\033[0m').strip() if choice == '1': # print('註冊') phone = input('\033[32;0m請輸入手機號>>>:\033[0m').strip() name = input('\033[33;0m請輸入用戶名>>>:\033[0m').strip() pwd = input('\033[34;0m請輸入密碼>>>:\033[0m').strip() sex = input('\033[35;0m請輸入性別>>>:\033[0m').strip() age = input('\033[36;0m請輸入年齡>>>:\033[0m').strip() with open('db.txt', 'a', encoding='UTF-8') as f: f.write('%s,%s,%s,%s,%s\n' % (phone, name, pwd, sex, age)) elif choice == '2': # print('查看') phone = input('\033[37;0m請輸入手機號:\033[0m').strip() with open('db.txt', 'rt', encoding='UTF-8') as f: for line in f: if line.startswith(phone): print(line, end='') else: print('\033[31;1m此用戶還沒註冊\033[1m') break else: print('\033[31;1m輸入的不正確\033[1m')