Python3 对于中文文件的读写处理
生活随笔
收集整理的這篇文章主要介紹了
Python3 对于中文文件的读写处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
字符串在Python內部的表示是Unicode編碼,因此,在做編碼轉換時,通常需要以Unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成Unicode,再從Unicode編碼(encode)成另一種編碼。
在新版本的python3中,取消了unicode類型,代替它的是使用unicode字符的字符串類型(str),字符串類型(str)成為基礎類型如下所示,而編碼后的變為了字節類型(bytes) 但是兩個函數的使用方法不變:
例如:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sun Sep 9 18:11:25 2018@author: lilong """u = '中文' #指定字符串類型對象u str00 = u.encode('gb2312') # 以gb2312編碼對u進行編碼,獲得bytes類型對象str u1 = str00.decode('gb2312') # 以gb2312編碼對字符串str進行解碼,獲得字符串類型對象u1 print('u1:',u1)''' #如果以utf-8的編碼對str進行解碼得到的結果,將無法還原原來的字符串內容 u2 = str00.decode('utf-8') print('u2:',u2) '''import codecs import chardet#必須事先知道文件的編碼格式,這里文件編碼是使用的utf-8 f = codecs.open('text_1.txt','w+',encoding='utf-8') #如果open時使用的encoding和文件本身的encoding不一致的話,那么這里將會產生錯誤 f.write('顯示成功!') f.close() print('...........................')## 文件的編碼,這里必須是‘rb’即二進制讀取 f = open('text_1.txt','rb') data = f.read() print(chardet.detect(data)) f.close() # 讀取文件內容,如果是不識別的encoding格式(識別的encoding類型跟使用的系統有關),這里將讀取失敗 f = codecs.open('text_1.txt','r+') s = f.read() # 假設文件保存時以utf-8編碼保存,以文件保存格式對內容進行解碼,獲得unicode字符串 u = s.encode('utf-8').decode('utf-8') print('u:',u) f.close() print('...........................')f = open('corpus_1.txt','rb') data = f.read() print(chardet.detect(data)) f.close()f = codecs.open('corpus_1.txt','r+') # 如果是不識別的encoding格式(識別的encoding類型跟使用的系統有關),這里將讀取失敗 s = f.read() # 假設文件保存時以utf-8編碼保存,以文件保存格式對內容進行解碼,獲得unicode字符串 u = s.encode().decode('utf-8') print('u:',u) # 下面我們就可以對內容進行各種編碼的轉換了 u1=u.encode('gb2312') #print('u1:',u1) print(u1.decode('gb2312')) f.close()結果:
u1: 中文 ........................... {'encoding': 'utf-8', 'confidence': 0.9690625, 'language': ''} u: 顯示成功! ........................... {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} u: <content>南都訊 記者劉凡 周昌和 任笑一 繼推出日票后,深圳今后將設地鐵VIP頭等車廂,設坐票制。昨日,《南都METRO》創刊儀式暨2012年深港地鐵圈高峰論壇上透露,在未來的11號線上將增加特色服務,滿足不同消費層次的乘客的不同需求,如特設行李架的車廂和買雙倍票可有座位坐的VIP車廂等。B厶成希深圳市政府副秘書長、軌道交通建設辦公室主任趙鵬林透露,地鐵未來的方向將分等級,滿足不同層次的人的需求,提供不同層次的有針對的服務。其中包括一些檔次稍微高一些的服務。“我們要讓公共交通也能滿足檔次稍高一些的服務”。比如,嘗試有座位的地鐵票服務。尤其是一些遠道而來的乘客,通過提供坐票服務,讓乘坐地鐵也能享受到非常舒適的體驗。他說,這種坐票的服務有望在地鐵3期上實行,將加掛2節車廂以實施花錢可買座位的服務。!拔頤竅M軌道交通和家里開的車一樣,分很多種。”趙鵬林說,比如有些地鐵是“觀光線”,不僅沿途的風光非常好,還能憑一張票無數次上下,如同旅游時提供的“通票服務”。再比如,設立可以放大件行李的車廂,今后通過設專門可放大件行李的座位,避免像現在放行李不太方便的現象。“未來地鐵初步不僅在干線上鋪設,還會在支線、城際線上去建設。”!熬醯萌綣車費不太貴的話,還是愿意考慮的。”昨日市民黃小姐表示,尤其是從老街到機場這一段,老街站每次上下客都很多人,而如果趕上上下班高峰期,特別擁擠,要一路從老街站站到機場,40、50分鐘還是挺吃力的,寧愿多花點錢也能稍微舒適一點。但是白領林先生則表示,自己每天上下班都要坐地鐵,出雙倍車資買坐票費用有點高。</content> <content>南都訊 記者劉凡 周昌和 任笑一 繼推出日票后,深圳今后將設地鐵VIP頭等車廂,設坐票制。昨日,《南都METRO》創刊儀式暨2012年深港地鐵圈高峰論壇上透露,在未來的11號線上將增加特色服務,滿足不同消費層次的乘客的不同需求,如特設行李架的車廂和買雙倍票可有座位坐的VIP車廂等。B厶成希深圳市政府副秘書長、軌道交通建設辦公室主任趙鵬林透露,地鐵未來的方向將分等級,滿足不同層次的人的需求,提供不同層次的有針對的服務。其中包括一些檔次稍微高一些的服務。“我們要讓公共交通也能滿足檔次稍高一些的服務”。比如,嘗試有座位的地鐵票服務。尤其是一些遠道而來的乘客,通過提供坐票服務,讓乘坐地鐵也能享受到非常舒適的體驗。他說,這種坐票的服務有望在地鐵3期上實行,將加掛2節車廂以實施花錢可買座位的服務。!拔頤竅M軌道交通和家里開的車一樣,分很多種。”趙鵬林說,比如有些地鐵是“觀光線”,不僅沿途的風光非常好,還能憑一張票無數次上下,如同旅游時提供的“通票服務”。再比如,設立可以放大件行李的車廂,今后通過設專門可放大件行李的座位,避免像現在放行李不太方便的現象。“未來地鐵初步不僅在干線上鋪設,還會在支線、城際線上去建設。”!熬醯萌綣車費不太貴的話,還是愿意考慮的。”昨日市民黃小姐表示,尤其是從老街到機場這一段,老街站每次上下客都很多人,而如果趕上上下班高峰期,特別擁擠,要一路從老街站站到機場,40、50分鐘還是挺吃力的,寧愿多花點錢也能稍微舒適一點。但是白領林先生則表示,自己每天上下班都要坐地鐵,出雙倍車資買坐票費用有點高。</content>Python2和Python3在字符串編碼上的區別:
python2的這里就不再講述了,直接看pyhton3的:
>>> '張俊' #python3的字符串默認為unicode格式(無編碼) '張俊'>>> u'張俊' #由于默認為unicode格式,因此字符串不用像python2一樣顯式地指出其類型,否則是語法錯誤。 File "<stdin>", line 1 u'張俊' ^ SyntaxError: invalid syntax>>> type('張俊') #python3中文本字符串和字節字符串是嚴格區分的,默認為unicode格式的文本字符串 <class 'str'>>>> '張俊'.decode('utf-8') #因為默認的文本字符串為unicode格式,因此文本字符串沒有decode方法 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'str' object has no attribute 'decode'>>> '張俊'.encode('utf-8') #將文本字符串編碼,轉換為已編碼的字節字符串類型 b'\xe5\xbc\xa0\xe4\xbf\x8a'>>> type('張俊'.encode('utf-8')) <class 'bytes'>>>> print ('張俊'.encode('utf-8')) #對于已編碼的字節字符串,文本字符串的許多特性和方法已經不能使用。 b'\xe5\xbc\xa0\xe4\xbf\x8a'>>>print ('張俊'.encode('utf-8')) b'\xe5\xbc\xa0\xe4\xbf\x8a'>>> print ('張俊'.encode('utf-8').decode('utf-8')) #必須將字節字符串解碼后才能打印出來 張俊參考:
https://www.cnblogs.com/geekard/archive/2012/10/04/python-string-endec.html
總結
以上是生活随笔為你收集整理的Python3 对于中文文件的读写处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中央空调打孔害人吗物业不让打孔不让装中央
- 下一篇: Mac下文件的编码及修改编码