如何讀寫文本文件?
實(shí)際案例
某文本文件編碼格式已直(如UTF-8,GBK,BIG5),在python2.x和python3.x中分別如何讀取這些文件?
解決方案
字符串的語義發(fā)生了變化:
python2 | python3 |
---|---|
str | bytes |
unicode | str |
python2.x 寫入文件前對(duì) unicode 編碼,讀入文件后對(duì)二進(jìn)制字符串解碼
>>> f = open('py2.txt', 'w')>>> s = u'你好'>>> f.write(s.encode('gbk'))>>> f.close()>>> f = open('py2.txt', 'r')>>> t = f.read()>>> print t.decode('gbk')你好
python3.x 中 open 函數(shù)指定 t 的文本模式, encoding 指定編碼格式
>>> f = open('py3.txt', 'wt', encoding='utf-8')>>> f.write('你好')2>>> f.close()>>> f = open('py3.txt', 'rt', encoding='utf-8')>>> s = f.read()>>> s'你好'
如何設(shè)置文件的緩沖
實(shí)際案例
將文件內(nèi)容寫入到硬盤設(shè)備時(shí),使用系統(tǒng)調(diào)用,這類I/O操作的時(shí)間很長(zhǎng),為了減少I/O操作的次數(shù),文件通常使用緩沖區(qū)(有足夠多的數(shù)據(jù)才進(jìn)行系統(tǒng)調(diào)用),文件的緩存行為,分為全緩沖、行緩存、無緩沖。
如何設(shè)置Python中文件對(duì)象的緩沖行文?
解決方案
全緩沖: open 函數(shù)的 buffering 設(shè)置為大于1的整數(shù)n,n為緩沖區(qū)大小
>>> f = open('demo2.txt', 'w', buffering=2048)>>> f.write('+' * 1024)>>> f.write('+' * 1023)# 大于2048的時(shí)候就寫入文件>>> f.write('-' * 2)>>> f.close()
行緩沖: open 函數(shù)的 buffering 設(shè)置為1
>>> f = open('demo3.txt', 'w', buffering=1)>>> f.write('abcd')>>> f.write('1234')# 只要加上/n就寫入文件中>>> f.write('/n')>>> f.close()
無緩沖: open 函數(shù)的 buffering 設(shè)置為0
>>> f = open('demo4.txt', 'w', buffering=0)>>> f.write('a')>>> f.write('b')>>> f.close()
如何將文件映射到內(nèi)存?
實(shí)際案例
解決方案
使用標(biāo)準(zhǔn)庫中的 mmap 模塊的 mmap()
函數(shù),它需要一個(gè)打開的文件描述符作為參數(shù)
新聞熱點(diǎn)
疑難解答
圖片精選