字元編碼的應用與檔案操作
阿新 • • 發佈:2022-03-14
目錄
字元編碼的實際應用
編碼與解碼
s1 = '仰天大笑出門去' #編碼 將人類能夠看懂的字元 編碼成計算機能夠直接看懂的字元 print(s1.encode('gbk')) >>>:b'\xd1\xf6\xcc\xec\xb4\xf3\xd0\xa6\xb3\xf6\xc3\xc5\xc8\xa5' ''' 字串前面如果加了字母b表明該資料型別為bytes型別可以看成二進位制 ''' #解碼 將計算機能夠直接讀懂的字元解碼成人類能夠讀懂字元 res = s1.encode('gbk') print(res.decode('gbk')) >>>:仰天大笑出門去 print(res.decode('utf8')) # 報錯 # utf-8用三個十六進位制來表示一箇中文字元,gbk用二個十六進位制來表示一箇中文字元。 ''' 基於網路傳輸資料 資料都必須時二進位制格式,所有肯定涉及編碼與解碼 ''' # 亂碼 編碼與解碼型別不同,會出現亂碼 所以用什麼進行變麼就用什麼進行解碼,便不會出現亂碼 #python直譯器 python直譯器預設使用的時ASCII碼,因此在python中出現中文會報錯。 #解決辦法 1.新增檔案頭:coding:utf8或者 _*_ coding:utf8 _*_ 2.在使用python2直譯器環境下定義字串,會在前面加上u eg: s = u'仰天大笑' 而在python中,預設編碼為utf8
檔案操作
檔案操作簡介
#什麼時檔案 檔案是作業系統為我們提供的操作儲存空間的快捷方式 #程式碼操作檔案的流程 1.開啟檔案、建立檔案 2.編輯檔案內容 3.儲存檔案內容 4.關閉檔案 #基本語法結構 結構1: f1 = open() f1.close() 結構2: with open() as f: pass # 1.使用關鍵字開啟資料夾 open(r'a.txt') #相對路徑 open(r'D:\py\文件\a.txt') #絕對路徑 '''在路徑前面加上r是為了防止特殊符號導致路徑出錯''' res = open(r'a.txt','r', encoding = 'utf8') ''' open(檔案路徑,檔案操作模式,檔案的編碼) 1.檔案的路徑是必須的 2.檔案的操作模式和檔案的編碼可以不寫,預設為rt和utf8 ''' res.read() #只讀不寫 res.write() #只寫不讀 ''' open檔案操作完之後要使用close關閉檔案,但是經常會被遺忘 ''' # with上下文管理 with open(r'a.txt', 'r', encoding = 'uftf8') as f: pass 使用withopen 當執行完子程式碼後自動關閉檔案
檔案的讀寫模式
r read 只讀模式 w write 只寫模式 a append 只追加模式 # r模式 #當使用r模式時,如果檔案不不存在將會直接報錯 with open(r'a.txt', 'r', encoding = 'utf8') as f: pass pass沒有任何功能,只是讓程式碼不報錯,與 ... 功能一致,通常使用pass 路徑存在,正常開啟檔案並等待內容讀取 with open(r'a.txt', 'r', encoding = 'utf8') as f: print(f.read()) #一次性讀取檔案中的所有內容 f.write('hello word') #報錯 # w模式 #使用w模式,檔案不存在,將會自動一個檔案 檔案存在則清空檔案內容 with open(r'a.txt', 'w', encoding = 'utf8') as f: f.write('hello 1\n') #將內容寫入檔案 f.write('hello 2\r') #將內容寫入檔案 f.write('hello 3\r') #將內容寫入檔案 ''' \n \r 都是換行符號 最早時,\r\n表示換行 ''' # a模式 #路徑不存在,自動建立檔案,路徑存在並不會清空檔案 with open(r'a.txt', 'a', encoding = 'utf8') as f: f.write('hello world') #將hello world 寫入檔案 print(f.read()) #報錯,不能讀
檔案的操作模式
# t模式
文字模式 是預設模式
r rt
w wt
a at
1.只能操作文字檔案
2.必須指定encoding引數
3.讀寫都是以字串為最小單位
# b模式
二進位制模式,可以操作任意型別檔案
rb,wb,ab,,,b不能省略
1.可以操作任意型別檔案
2.不需要指指定encoding引數
3.讀寫都是以bytes為最小單位
檔案內建放到
read() #一次性讀取所有檔案內容
1.執行完之後游標在檔案末尾,當再次讀取時,沒有內容
2.當檔案內容過大時,容易造成記憶體溢位
readline() #一次只讀取一行內容
readlines() #結果為一個列表,一行的內容,對應列表中的一個元素
readable() #判斷是否可讀
write() #寫入檔案內容(字串、bytes型別都可以)
writelines() #將列表中的多個元素寫入檔案
writeable() #判斷檔案是否可寫
flush() #儲存檔案
檔案拷貝
點選展開
path1 = input(r'請輸入檔案路徑>>>:')
path2 = input(r'請輸入複製後文件路徑>>>:')
with open(rf'{path1}', 'r', encoding='utf8') as f:
res = f.read()
with open(f'{path2}', 'w', encoding='utf8') as f1:
f1.write(res)
使用者登入
點選展開
while True:
# 列印選單介面
print('**********選單**********\n1.登入\n2.註冊')
# 獲取使用者選項
choice = input('請進行功能選擇>>>:').strip()
if choice == '1':
username = input('請輸入使用者名稱>>>:').strip()
userpwd = input('請輸入密碼>>>:').strip()
with open('userinfo.txt', 'r', encoding='utf8') as f:
for i in f:
if i.split('|')[0] == username and i.split('|')[1] == userpwd:
print('登入成功')
else:
print('使用者名稱或密碼錯誤')
if choice == '2':
while True:
account = input('請輸入你要註冊的賬號:>>>').strip()
pwd1 = input('請輸入設定的密碼>>>:').strip()
pwd2 = input('請再次輸入設定的密碼>>>:').strip()
if pwd1 == pwd2:
break
else:
print('您兩次輸入的密碼不一樣')
with open('userinfo.txt','r', encoding='utf8') as f1:
for info in f1:
if account in info:
print('使用者名稱已存在')
else:
with open('userinfo.txt', 'a', encoding='utf8') as f2:
f2.write(f'{account}|{pwd1}')