python讀、寫、追加
阿新 • • 發佈:2021-11-11
讀寫模式之a模式
# a模式 只追加模式
# 路徑不存在:自動建立
with open(r'a.txt','a',encoding='utf8') as f:
pass
# 路徑存在:不會清空檔案 在檔案末尾新增內容
with open(r'a.txt', 'a', encoding='utf8') as f:
f.write('\n今天週四了 馬上又要放假了 好開心!')
"""小總結
我們所學習的r w a讀寫模式都只能操作文字檔案
"""
檔案操作方法
# 檔案操作方法 # 1.讀系列 with open(r'a.txt', 'r', encoding='utf8') as f: # print(f.read()) # 一次性讀取檔案內所有的內容 # print(f.readline()) # 每次只讀檔案一行內容 # print(f.readlines()) # 讀取檔案所有的內容 組織成列表 每個元素是檔案的每行內容 # print(f.readable()) # 判斷當前檔案是否具備讀的能力 # 2.寫系列 with open(r'a.txt','w',encoding='utf8') as f: # f.write('克服一切困難 奧利給!') # 往檔案內寫入文字內容 # f.write(123) # 寫入的內容必須是字串型別 # f.writelines(['jason','kevin','tony']) # 可以將列表中多個字串元素全部寫入 # print(f.writable()) # True # print(f.readable()) # False f.flush() # 直接將記憶體內檔案資料刷到硬碟 相當於ctrl+s
檔案優化操作
with open(r'a.txt', 'r', encoding='utf8') as f: # print(f.read()) # 一次性讀取檔案內所有的內容 # print(f.read()) # 一次性讀取檔案內所有的內容 # print(f.read()) # 一次性讀取檔案內所有的內容 """ 1.一次性讀完之後 游標停留在了檔案末尾 無法再次讀取內容 2.該方法在讀取大檔案的時候 可能會造成記憶體溢位的情況 解決上述問題的策略就是逐行讀取檔案內容 """ # for line in f: # 檔案變數名f支援for迴圈 相當於一行行讀取檔案內容 # line '''以後涉及到多行檔案內容的情況一般都是採用for迴圈讀取'''
課堂練習
1.簡易版本的註冊、登陸功能 普通要求(實現一次即可) 註冊功能 獲取使用者名稱和密碼組織成你喜歡的樣子寫入檔案即可 登陸功能 獲取使用者名稱和密碼然後比對是否與檔案內使用者資料一致 # 註冊功能 # 1.獲取使用者使用者名稱和密碼 username = input('username>>>:').strip() password = input('password>>>:').strip() # 2.將使用者名稱和密碼組織成一個字串 data = '%s|%s' % (username, password) # 3.檔案操作 寫入資料 with open(r'userinfo.txt', 'w', encoding='utf8') as f: f.write(data) print('使用者:%s 註冊成功' % username) # 登入功能 # 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username) username = input('username>>>:').strip() password = input('password>>>:').strip() # 2.獲取檔案內真實的使用者資料 with open(r'userinfo.txt','r',encoding='utf8') as f: # 由於現在檔案中只有一行內容 我們乾脆直接讀取完 data = f.read() # 'jason|jason123' '''with子程式碼執行完之後的結果是可以在外面使用的''' # 3.切割字串獲取真實的使用者名稱和密碼 res = data.split('|') # ['jason', 'jason123'] '''這裡也可以直接使用解壓賦值的操作 real_name,real_pwd = data.split('|')''' # 4.比對資料 if username == res[0] and password == res[1]: print('登入成功') else: print('使用者名稱或密碼錯誤')
進階練習
# 多使用者註冊
# while True:
# # 1.獲取使用者使用者名稱和密碼
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# # 2.將使用者名稱和密碼組織成一個字串
# data = '%s|%s\n' % (username, password)
# # 2.1.判斷使用者名稱是否已存在
# with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
# # 2.2.迴圈讀取每一行使用者資料
# for line in f1:
# # 2.3.獲取每一行資料中的使用者名稱
# real_name, real_pwd = line.split('|')
# # 2.4.判斷使用者名稱是否一致
# if username == real_name:
# print('使用者名稱已存在')
# break
# else:
# # 3.檔案操作 寫入資料
# with open(r'userinfo.txt', 'a', encoding='utf8') as f:
# f.write(data)
# print('使用者:%s 註冊成功' % username)
# 多使用者登入
# 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.獲取檔案內真實的使用者資料
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# 3.切割字串獲取真實的使用者名稱和密碼
'''注意密碼末尾有\n'''
real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
# 4.比對使用者名稱和密碼是否正確
if username == real_name and password == real_pwd.strip('\n'):
print('登入成功')
break
else:
print('使用者名稱或密碼錯誤')
程式碼整合
while True:
print("""
1.使用者註冊
2.使用者登入
""")
choice = input('請輸入您想要執行的功能編號>>>:').strip()
if choice == '1':
# 1.獲取使用者使用者名稱和密碼
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.將使用者名稱和密碼組織成一個字串
data = '%s|%s\n' % (username, password)
# 2.1.判斷使用者名稱是否已存在
with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
# 2.2.迴圈讀取每一行使用者資料
for line in f1:
# 2.3.獲取每一行資料中的使用者名稱
real_name, real_pwd = line.split('|')
# 2.4.判斷使用者名稱是否一致
if username == real_name:
print('使用者名稱已存在')
break
else:
# 3.檔案操作 寫入資料
with open(r'userinfo.txt', 'a', encoding='utf8') as f:
f.write(data)
print('使用者:%s 註冊成功' % username)
elif choice == '2':
# 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.獲取檔案內真實的使用者資料
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# 3.切割字串獲取真實的使用者名稱和密碼
'''注意密碼末尾有\n'''
real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
# 4.比對使用者名稱和密碼是否正確
if username == real_name and password == real_pwd.strip('\n'):
print('登入成功')
break
else:
print('使用者名稱或密碼錯誤')
else:
print('沒有改功能 愛咋滴咋滴!')
檔案操作模式
t 文字模式
1.預設的模式
r w a >>> rt wt at
2.該模式所有操作都是以字串基本單位(文字)
3.該模式必須要指定encoding引數
4.該模式只能操作文字檔案
b 二進位制模式
1.該模式可以操作任意型別的檔案
2.該模式所有操作都是以bytes型別(二進位制)基本單位
3.該模式不需要指定encoding引數
rb wb ab