字元編碼與檔案處理
字元編碼
1、什麼是字元編碼
文字元號--------編碼------------>數字
文字元號<--------解碼------------數字
我們要將計算機上的檔案資料儲存到硬碟當中,但肯定不能直接儲存進去,硬碟只能接受二進位制,所以我們在儲存進硬碟的時候都會先將其轉換為二進位制
字元編碼表:
一個字元對應一個數字
2、為何要研究字元編碼
為了解決亂碼問題:
1、存取都用同一張字元編碼表
3、字元編碼表的發展歷程
1、一家獨大
ASCII:只能識別英文字元
用8個bit對應一個英文字元
最開始美國製定字元編碼的時候考慮到是為了自己的人使用,所以能接受轉換的只有英文,只有這一種編碼表,所以能互相交流
2、天下大亂
GBK:能識別中文和英文
用16個bit(2Bytes)對應一個字元
後來電腦發展,各個國家也開始使用,但由於有些國家並不是英語為主體的,所以他們也製作了適合自己國家的字元編碼,但由於語言不是互通的,導致有些並不能翻譯,就會導致亂碼
shift-JIS(日本的字元編碼)
Euc-KR
3、歸於一統
unicode:能識別萬國字元
用16bit(2Bytes)對應一個字元
utf-8
後來統一製作能識別萬國字元的unicode,所以現在可以解碼很多資料,utf-8可以看作unicode的穩定升級版,但是並不能拿來完全解碼,只有等到使用unicode的舊軟體退場後才能完全使用,現在大部分軟體都是預設utf-8,就是為了方便編碼和解碼
總結:
英文字元----》記憶體(ASCII格式的二進位制數)----》硬碟(ASCII格式的二進位制數)
中文、英文字元—》記憶體(GBK格式的二進位制數)----》硬碟(GBK格式的二進位制數)
日文、英文字元—》記憶體(Shif-jis格式的二進位制數)–》硬碟(Shif-jis格式的二進位制數)
萬國字元----》記憶體(unicode格式的二進位制數)--》硬碟(utf-8格式的二進位制數)
5、執行python程式的三個階段
1、先啟動一個python直譯器
2、python直譯器會將檔案內容從硬碟讀入記憶體
3、python直譯器會解釋執行剛剛讀入記憶體的程式碼,識別語法
x=“你好hello”
編碼和解碼的步驟
# 字元-------------》unicode格式的二進位制(記憶體)--------------->utf-8格式的二進位制(硬碟)
# 編碼 編碼
# 字元《-------------unicode格式的二進位制(記憶體)<---------------utf-8格式的二進位制(硬碟)
# 解碼 解碼
一個小"栗子":
x="上"
print(x) # 列印unicode等同於列印字元
utf8_res=x.encode("utf-8")#將x用utf-8進行編碼
# print(utf8_res,type(utf8_res)) # bytes等於二進位制#輸出編碼後的二進位制,也輸出型別
unicode_res=utf8_res.decode("utf-8")#用utf-8格式進行解碼
print(unicode_res)#輸出解碼後的內容
檔案處理的基本步驟
# f=open("aaa.py",mode='rt',encoding='gbk')#開啟aaa.py檔案,模式用只讀,用txt顯示,字元編碼是gbk
#
# res=f.read()#先讀裡面的內容並且賦值給res
# print(res)#輸出res
#
# f.close()#關掉作業系統佔用的資源
# f.read()#沒法呼叫這個功能
上下文管理
with open(“aaa.py”,mode=‘rt’,encoding=‘gbk’) as f:#呼叫with方法,當程式碼離開with語句時,會自動關閉
res = f.read()
print(res)
檔案開啟模式
一:控制讀寫操作模式
r:只讀===========>預設(只要不寫出來就是預設狀態)
w:只寫(如果存在檔案,就會清空檔案內容)
a:只追加寫(跳轉到檔案末尾來追加,注意不是最後一行新新增一行,是直接接著最後一行後面)
二:控制讀寫內容的模式
t:讀寫都是文字格式,即讀寫都是用字串========》預設
b:讀寫都是bytes格式,bytes等同於二進位制#使用b的時候不用指定字元編碼,但是要注意開啟的檔案大小,因為可能檔案過大會對記憶體有影響
強調:
如果是t模式,一定記住加上encoding=“編碼格式”
如果是b模式,一定記住別加encoding=“編碼格式”
三 案例
# 3.1 案例1
# r:在檔案存在的時候,檔案指標調到檔案開頭,檔案不存在直接報錯
# f=open("a.txt",mode="rt",encoding='utf-8')
# # res=f.read()
# # print(res)
# f.close()
3.2 案例2
# w:在檔案存在的時候會清空檔案,檔案指標調到檔案開頭,檔案不存在會建立空文件
# f=open("c.txt",mode="wt",encoding='utf-8')
# # f.write("aaaa\n")
# # f.write("bbbb\n")
# # f.write("cccc\n")
# f.write("11111\n")
# f.close()
3.3 案例3
# a:在檔案存在的時候不會清空檔案,檔案指標調到檔案末尾,檔案不存在會建立空文件
# f=open("d.txt",mode="at",encoding='utf-8')#a是追加,只會在末尾繼續寫,要換行需要自己新增換行符
# f.write("6666666\n")
# f.write("6666666\n")
# f.write("6666666\n")
# f.write("11111\n")
# f.close()
3.4 案例4:rb wb ab
# f=open("a.txt",mode='rb')#用二進位制的方式開啟檔案
# res=f.read()#將讀的結果賦值給res
# print(res.decode("utf-8"))#用utf-8解碼並列印
# f.close()#回收計算機資源
# f=open("D:\fullstack16\day05\視訊\01 本週內容.mp4",mode='rb')#用二進位制的方式開啟檔案
# res=f.read()#將讀的結果賦值給res
# print(res)#列印結果
# f.close()#回收資源
# f=open("a.txt",mode='ab')#開啟檔案,模式是追加,二進位制
# f.write("你好".encode('utf-8'))#寫入你好,並且用utf-8編碼
# f.close()#回收資源
# with open(r"D:\fullstack16\day05\視訊\01 本週內容.mp4",mode='rb') as f1,\
# open(r"D:\111111.mp4",mode="wb") as f2:#開啟兩個檔案,並且f1的是僅讀,並且是二進位制,f2的是僅寫,二進位制
# res=f1.read()#將讀的結果賦值給res
# f2.write(res)#將res的內容寫入f2
這個方法適用於開啟的檔案不是很大的情況,不然記憶體容易被佔滿,容易卡住
# for line in f1:#迴圈讀出f1裡的內容
# f2.write(line)#將line裡的內容依次寫入f2裡
這個方法適用於內容比較大的檔案
相關文章
- Swift3.0語言教程刪除字元與處理字元編碼Swift字元
- Python編解碼問題與文字檔案處理Python
- ptyon 特殊處理 url 編碼與解碼,字元編碼轉化 unicode字元Unicode
- SCAU 高程綜合實驗:檔案操作與字元處理字元
- 含有特殊字元的資料檔案處理字元
- 處理檔名內含有特殊字元的檔案 (轉)字元
- GC機制+字元編碼+檔案操作GC字元
- lxml處理xml時的字元編碼問題XML字元
- C++ 字元處理函式(cctype標頭檔案)C++字元函式
- 編寫簡單的windows bat批處理指令碼檔案WindowsBAT指令碼
- 檔案下載檔名亂碼處理
- maven編譯遇到"編碼GBK的不可對映字元"警告的處理Maven編譯字元
- Python檔案讀寫詳解及設定檔案的字元編碼Python字元
- Python 編碼轉換與中文處理Python
- [R]檔案處理
- bat處理檔案BAT
- bat檔案處理BAT
- 用批處理檔案編譯並執行java編譯Java
- shell 字元處理字元
- Shell指令碼逐行處理文字檔案技巧指令碼
- codecs 編碼處理
- 檢測檔案編碼,轉換檔案編碼
- 【字元編碼】徹底理解字元編碼字元
- 字元編碼字元
- 【字元編碼】字元編碼 && Base64編碼演算法字元演算法
- Linux學習之檔案處理命令(二)目錄處理命令 && 檔案處理命令Linux
- 從原始檔到可執行檔案:原始檔的預處理、編譯、彙編、連結編譯
- window 批處理檔案
- python處理檔案Python
- Go xml檔案處理GoXML
- python檔案處理Python
- python 檔案處理Python
- Python 檔案處理Python
- JAVA ZIP 處理檔案Java
- 批處理檔案命令
- 檔案處理函式函式
- Windows批處理檔案Windows
- bat批處理檔案BAT