Python学习day10-文件处理
?
Python學習day10-文件處理字符編碼python2和3編碼的區別python程序運行的大致流程文件的三種打開方式with管理文件操作上下文Tips:
Python學習day10-文件處理
字符編碼
我們都知道,計算機只認識0和1的二進制數字,所以簡單來說,字符編碼就是使二進制和軟件所能識別的字符之間相互轉化的一個過程。
從字符編碼的發展歷史來看,最早出現的ASCII,即是從二進制到英文字符之間的相互轉化,直到現在仍在繼續運用,然后到各國自己開發的各種字符編碼,像我大中華開發的gb2312編碼,日本人的Shift_JIS編碼以及韓國人的Euc-kr編碼,都是只能識別本國的語言,不能兼容其他國家的語言。直到后來出現了一種能識別萬國語言的編碼,叫做Unicode,是世界的標準,從此之后亂碼的問題基本不會出現了。
當然Unicode也是有缺點的,就是同樣的數據來說,Unicode占用的空間會更大,會造成計算機空間的浪費,在傳輸和存儲上都有著很大的弊端。
于是,世界上最牛逼的編碼出現了,UTF-8,也被稱為可變長編碼,完美適用于所有情況。可是實際情況是,現在并不是所有的地方都在使用UTF-8。其原因還是個歷史遺留問題,也就是現在幾乎所有的計算機內存中存在的都是Unicode代碼,而各個國家的代碼也都要繼續運行中,所以不能一次性全部換成UTF-8,必須使用Unicode。還有一個原因就是Unicode可以識別玩過語言,但是UTF-8目前還不能,但是隨著時代的更替,所有內存中的代碼都將變為UTF-8格式,到時UTF-8編碼也將徹底取代Unicode編碼。
總的來說,不想出現亂碼的方法就是,字符按照什么標準編碼的,就要按什么標準解碼,也就是字符編碼,只要編碼解碼的字符編碼是相同的,文件就不會出現亂碼。
python2和3編碼的區別
python程序運行的大致流程
首先我們應該明白python程序運行的大致流程,基本可以分為三步:
-
而python2和3 的主要區別就是在第三步中,具體在于:
python3中用的編碼字符是UTF-8,而python2中用的編碼字符是Unicode加上文件頭部指定的coding編碼。
我們都知道終端會有自己的默認編碼,比如pycharm的默認編碼是UTF-8
所以這就導致了在python3中:
- 假設終端的默認編碼是GBK,可以識別GBK編碼的變量
- 但如果終端的默認編碼是UTF-8,可以識別GBK編碼的變量
而在python2中:
- 假設終端的默認編碼是GBK,可以識別GBK編碼的變量
- 但如果終端的默認編碼是UTF-8,就不能識別GBK編碼的變量
文件的三種打開方式
python中對文件的打開有三種基礎模式(默認為r模式):
x 1 f = open('file_name',mode,encoding = 'utf8')?
-
r為read,只讀模式
- xxxxxxxxxx 1 1 f = open('file_name','r',encoding = 'utf8') 2 ? ?data = f.read() 3 print()
?
-
w為write,只寫模式(清除后寫入)
- xxxxxxxxxx 1 1 f = open('file_name','w',encoding = 'utf8') 2 ? ? data = f.write()
-
?
-
a為append,追加模式(直接追加,不在原數據上修改)
- xxxxxxxxxx 1 1 f = open('file_name','a',encoding = 'utf8') 2 data = f.write()
-
?
文件讀寫的格式有兩種(默認為b模式):
-
t為text,也就是文本讀寫
-
b為bytes,以二進制方式讀寫
要注意,讀寫的格式要和讀或者寫組合才可以使用,比如rt,rb,wt,wb等等,不能單獨使用,而且讀和寫不能同時使用。
with管理文件操作上下文
with模式相對于直接open賦值的話優點在于不用手動關閉文件,前文我們講過,
xxxxxxxxxx 1 1 f = open('file_name',mode,encoding = 'utf8') 2 # 在結尾要加 3 f.close() 4 # 不然不能結束文件的打開而with打開文件則不用,使用方法如下:
x 1 with open('file_name','r',encoding = 'utf8')as fr: 2 ? ?data = fr.read() 3 ? ? 4 #with還有一個優點就是with可以同時打開多個文件,中間以逗號間隔,方便文件之間的操作 5 with open('file_name','r',encoding = 'utf8')as fr,open('file_name1','w',encoding = 'utf8')as fw,open('file_name3','a',encoding = 'utf8')as fa: 6 ? ?data1 = fr.read() 7 ? ?data2 = fw.write() 8 ? ?data3 = fa.write()Tips:
今天說一些對學習python的一些看法,今天已經是學習python第十天了,雖然做的項目不多,但是真切感受到python寫出來的程序執行效率確實不太高,從寫`leetcode的算法題可以看出來,執行時間普遍都比較長,很容易就超過時間限制了。
但是python寫代碼的速度是真的快,各種模塊,各種內置方法,基本自己能想到的一些想法,都可以通過很簡單的途徑出現,而不像編譯型語言一樣,很簡單的功能都需要自己寫很長,然后封裝成接口使用,這一點確實優點很大。
繼續努力,每一種編程語言,但凡火起來,總會有其原因,加油。
轉載于:https://www.cnblogs.com/Xu-PR/p/11317248.html
總結
以上是生活随笔為你收集整理的Python学习day10-文件处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础学习java------day7-
- 下一篇: python3 http.server