最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3.x讀寫文件及BOM處理詳解

 更新時(shí)間:2024年01月04日 15:53:39   作者:梯閱線條  
這篇文章主要為大家詳細(xì)介紹了python3.x讀寫文件及BOM處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1 python3.x讀寫文件及BOM處理

1.1 python3.x讀取和寫入U(xiǎn)nicode

python3.x的字符串為unicode,可以調(diào)用encode()方法手動(dòng)將字符串編碼為字節(jié)串(原始字節(jié)),也可以通過文件輸入輸出自動(dòng)編碼。

1.1.1 手動(dòng)編碼

描述

python3.x的字符串通過encode(編碼名)方法,將字符串轉(zhuǎn)換為原始字節(jié)串。

示例

>>> s='梯'
# python3.x 字符串 str 對應(yīng) unicode
>>> s,type(s)
('梯', <class 'str'>)
>>> s_gbk=s.encode('gbk')
>>> s_utf8=s.encode('utf-8')
# 1個(gè)漢字,gbk編碼為2個(gè)字節(jié), utf-8 編碼為3個(gè)字節(jié)
# 2位16進(jìn)制 占1個(gè)字節(jié)
>>> s_gbk,s_utf8
(b'\xcc\xdd', b'\xe6\xa2\xaf')
>>> len(s_gbk),len(s_utf8)
(2, 3)

1.1.2 寫文件編碼

描述

open寫文件時(shí),指定的encoding為文件保存到磁盤時(shí)的編碼格式。

示例

# 寫文件時(shí) encoding 表示文件存儲(chǔ)到磁盤的編碼格式
>>> open('gbk.txt','w',encoding='gbk').write('梯')
1
>>> open('utf8.txt','w',encoding='utf-8').write('梯')
1
# 'rb' 二進(jìn)制模式,讀取文件內(nèi)容為bytes類型,為文件實(shí)際存儲(chǔ)的字節(jié)串
# gbk編碼,1個(gè)中文占2個(gè)字節(jié)
>>> open('gbk.txt','rb').read()
b'\xcc\xdd'
# utf-8編碼,1個(gè)中文占3個(gè)字節(jié)
>>> open('utf8.txt','rb').read()
b'\xe6\xa2\xaf'

1.1.3 讀文件編碼

描述

open讀文件時(shí),指定的encoding為解釋器讀取文件字節(jié)串解碼使用的編碼格式。

示例

# 讀文件時(shí) encoding 表示解釋器讀取文件字節(jié)串解碼使用的編碼格式
# 需與文件存儲(chǔ)時(shí)編碼格式相同
>>> open('gbk.txt','r',encoding='gbk').read()
'梯'
>>> open('utf8.txt','r',encoding='utf-8').read()
'梯'
>>> dgbk=open('gbk.txt','rb').read();dgbk
b'\xcc\xdd'
>>> dutf8=open('utf8.txt','rb').read();dutf8
b'\xe6\xa2\xaf'
# 二進(jìn)制模式,讀取文件內(nèi)容后進(jìn)行手動(dòng)解碼
# python3.x 解釋器默認(rèn)編碼為utf-8
>>> dgbk.decode('gbk');dutf8.decode()
'梯'
'梯'

1.2 python讀寫文件默認(rèn)編碼

1.2.1 locale.getpreferredencoding()

用法

import locale
locale.getpreferredencoding()

描述

python的locale**.getpreferredencoding()**用于獲取用戶的首選編碼。

入?yún)镕alse,表示不使用任何額外設(shè)置。

入?yún)門rue或空,表示考慮當(dāng)前語言環(huán)境設(shè)置。

用戶的首選編碼用于python的open()函數(shù)讀寫文件的默認(rèn)編碼。

示例

>>> import locale
>>> locale.getpreferredencoding()
'cp936'
>>> locale.getpreferredencoding(False)
'cp936'

1.2.2 獲取梯的編碼字節(jié)串

>>> '梯'.encode()
b'\xe6\xa2\xaf'
>>> '梯'.encode('utf-8')
b'\xe6\xa2\xaf'
>>> '梯'.encode('gbk')
b'\xcc\xdd'
>>> '梯'.encode('cp936')
b'\xcc\xdd'
# utf-16 帶小端字節(jié)序
>>> '梯'.encode('utf-16')
b'\xff\xfe\xafh'
# utf-16 忽略小端字節(jié)序(little BOM)
>>> '梯'.encode('utf-16-le')
b'\xafh'

1.2.3 python3.x讀寫文件默認(rèn)編碼

描述

python3.x通過文本模式的open()打開文件,

encoding未傳時(shí),默認(rèn)編碼取locale.getpreferredencoding(False)。

open().encoding獲取文件對象的編碼方式。

open()打開文件時(shí)指定encoding編碼格式。

示例

>>> fpath='temp.txt'
# open()函數(shù)encoding未傳時(shí)默認(rèn)編碼取 locale.getpreferredencoding(False)
# 'r+' 文本模式打開文件
>>> f=open(fpath,'r+')
# f.encoding 獲取文件對象的編碼方式
>>> f.encoding
'cp936'
# 文件指針會(huì)停留在文件結(jié)尾
>>> f.write('梯')
1
# 文件指針移動(dòng)到開頭
>>> f.seek(0)
0
>>> f.read()
'梯'
>>> f.close()
# 'rb' 二進(jìn)制模式直接讀取文件的字節(jié)串
# 與 cp936 編碼一致
>>> open(fpath,'rb').read()
b'\xcc\xdd'
# 通過 相同的編碼 cp936或gbk 讀取文件內(nèi)容
>>> open(fpath,'r',encoding='cp936').read()
'梯'
>>> open(fpath,'r',encoding='gbk').read()
'梯'
>>> open(fpath,'r',encoding='utf-8').read()
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    open(fpath,'r',encoding='utf-8').read()
  File "D:\python3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte

1.2.4 python2.x讀寫文件默認(rèn)編碼

描述

python2.x通過文本模式的open()打開文件,沒有encoding入?yún)ⅲ?/p>

寫文件時(shí)默認(rèn)編碼取locale.getpreferredencoding(False),

讀文件時(shí)直接讀取字節(jié)串。

python2.x通過codecs.open(encoding)指定文件編碼格式。

如果要向文件寫入write中文,需用Unicode字符串,通過u’梯’進(jìn)行創(chuàng)建后寫入。

示例

# python2.x內(nèi)置open()函數(shù)沒有encoding入?yún)?,無法指定編碼方法
>>> fpath='temp.txt'
>>> f=open(fpath,'w')
>>> f.write('a梯')
>>> f.close()
>>> open(fpath,'r').read()
'a\xcc\xdd'
# 'rb' 二進(jìn)制模式直接讀取文件的字節(jié)串
# 與 cp936 編碼一致
>>> open(fpath,'rb').read()
'a\xcc\xdd'
>>> len('a梯')
3
# python2.x通過 codecs.open(encoding)指定編碼
>>> import codecs
>>> f=codecs.open(fpath,'w','utf-8')
# 寫入漢字時(shí)需要通過u'漢字'創(chuàng)建Unicode字符串
# 因?yàn)閜ython2.x解釋器默認(rèn)編碼為ASCII碼,
# '梯'字符串str用操作系統(tǒng)cp936自動(dòng)編碼為 '\xcc\xdd'
# 解釋器需要對其解碼為Unicode,解碼時(shí) \xcc 不在ASCII范圍內(nèi),會(huì)報(bào)錯(cuò)
>>> f.write(u'梯')
>>> f.close()
# 'rb' 二進(jìn)制模式直接讀取文件的字節(jié)串
# 與 utf-8 編碼一致
>>> codecs.open(fpath,'rb').read()
'\xe6\xa2\xaf'

1.3 python3.x處理BOM

描述

文件開始的字節(jié)順序標(biāo)記(BOM,Byte Order Mark)。

UTF-8的BOM:’\xef\xbb\xbf’,對應(yīng)Unicode:'\ufeff’。

UTF-16的小端BOM:’ \xff\xfe’ 對應(yīng)Unicode: ‘\ufeff’。

NO寫文件文件開頭帶BOM讀文件
1UTF-8文件開頭不添加BOM顯示BOM的Unicode
2UTF-8-sig文件開頭添加BOM不顯示BOM
3UTF-16文件開頭默認(rèn)添加當(dāng)前系統(tǒng)字節(jié)序BOM不顯示BOM
4UTF-16-le文件開頭不添加BOM顯示BOM的Unicode

示例

>>> fpath='utf8bom.txt'
# encoding='utf-8-sig', 寫文件時(shí),會(huì)在文件開頭加入 字節(jié)順序標(biāo)記
>>> open(fpath,'w',encoding='utf-8-sig').write('梯')
1
>>> open(fpath,'rb').read()
b'\xef\xbb\xbf\xe6\xa2\xaf'
>>> open(fpath,'r',encoding='utf-8').read()
'\ufeff梯'
# encoding='utf-8-sig', 讀文件時(shí),忽略字節(jié)順序標(biāo)記
>>> open(fpath,'r',encoding='utf-8-sig').read()
'梯'

>>> import sys
# sys.byteorder 當(dāng)前系統(tǒng)的字節(jié)序, 'little'(小端)或 'big'(大端)
>>> sys.byteorder
'little'
# 寫文件時(shí),encoding='utf-16' ,默認(rèn)添加當(dāng)前系統(tǒng)字節(jié)序(little)
>>> open(fpath,'w',encoding='utf-16').write('梯')
1
# 二進(jìn)制模式,讀取實(shí)際存放字節(jié)串,utf-16小端字節(jié)序?yàn)?\xff\xfe 
>>> open(fpath,'rb').read()
b'\xff\xfe\xafh'
>>> open(fpath,'r',encoding='utf-16').read()
'梯'
# encoding='utf-16-le',讀文件時(shí),忽略字節(jié)順序標(biāo)記
>>> open(fpath,'r',encoding='utf-16-le').read()
'\ufeff梯'

# encoding='utf-16-le',寫文件時(shí),不添加BOM
>>> open(fpath,'w',encoding='utf-16-le').write('梯')
1
>>> open(fpath,'rb').read()
b'\xafh'
>>> open(fpath,'r',encoding='utf-16-le').read()
'梯'
# encoding='utf-16-le',寫文件后,不能用 utf-16 讀取
>>> open(fpath,'r',encoding='utf-16').read()
Traceback (most recent call last):
  File "<pyshell#102>", line 1, in <module>
    open(fpath,'r',encoding='utf-16').read()
  File "D:\python3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
  File "D:\python3\lib\encodings\utf_16.py", line 67, in _buffer_decode
    raise UnicodeError("UTF-16 stream does not start with BOM")
UnicodeError: UTF-16 stream does not start with BOM

到此這篇關(guān)于python3.x讀寫文件及BOM處理詳解的文章就介紹到這了,更多相關(guān)python3.x讀寫文件及BOM處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd)

    關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd)

    這篇文章主要介紹了關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python下如何查詢CS反恐精英的服務(wù)器信息

    python下如何查詢CS反恐精英的服務(wù)器信息

    這篇文章主要介紹了python下如何查詢CS反恐精英服務(wù)器信息的方法,分別分享了反恐精英1.5版本和反恐精英1.6版本的實(shí)現(xiàn)方法示例,有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法

    python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法

    這篇文章主要介紹了python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法,涉及Python調(diào)用java模塊的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python 爬取微信文章

    python 爬取微信文章

    本文給大家分享的是使用python通過搜狗入口,爬取微信文章的小程序,非常的簡單實(shí)用,有需要的小伙伴可以參考下
    2016-01-01
  • 談一談數(shù)組拼接tf.concat()和np.concatenate()的區(qū)別

    談一談數(shù)組拼接tf.concat()和np.concatenate()的區(qū)別

    今天小編就為大家分享一篇談?wù)剶?shù)組拼接tf.concat()和np.concatenate()的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python使用Turtle模塊繪制五星紅旗代碼示例

    Python使用Turtle模塊繪制五星紅旗代碼示例

    這篇文章主要介紹了Python使用Turtle模塊繪制五星紅旗代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • keras.layers.Layer中無法定義name的問題及解決

    keras.layers.Layer中無法定義name的問題及解決

    這篇文章主要介紹了keras.layers.Layer中無法定義name的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析

    Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析

    這篇文章主要介紹了Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法

    Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法

    這篇文章主要介紹了Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法,本文是實(shí)際經(jīng)驗(yàn)總結(jié)而來,沒有碰到這個(gè)需要可能不會(huì)注意到這個(gè)問題,需要的朋友可以參考下
    2014-08-08
  • Python內(nèi)存優(yōu)化的七種技巧分享

    Python內(nèi)存優(yōu)化的七種技巧分享

    本文將重點(diǎn)介紹 Python 的內(nèi)置機(jī)制,并介紹 7 種原始但有效的內(nèi)存優(yōu)化技巧,掌握這些技巧將大大提高你的 Python 編程能力,文中通過代碼示例給大家講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧
    2024-02-02

最新評論

呼图壁县| 鄢陵县| 杨浦区| 鸡泽县| 嘉兴市| 绥宁县| 正镶白旗| 郓城县| 巴楚县| 牙克石市| 武胜县| 长武县| 轮台县| 万州区| 南丰县| 周口市| 武强县| 于田县| 托里县| 乌拉特前旗| 延安市| 太仆寺旗| 巫溪县| 山西省| 贺州市| 攀枝花市| 田林县| 五莲县| 廊坊市| 新龙县| 突泉县| 中山市| 宜君县| 巴青县| 玉环县| 盘锦市| 微博| 濉溪县| 赞皇县| 海伦市| 通海县|