如何讀寫文本文件?
實際案例
某文本文件編碼格式已直(如UTF-8,GBK,BIG5),在python2.x和python3.x中分別如何讀取這些文件?
解決方案
字符串的語義發生了變化:
python2 | python3 |
---|---|
str | bytes |
unicode | str |
python2.x 寫入文件前對 unicode 編碼,讀入文件后對二進制字符串解碼
>>> 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 函數指定 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'你好'
如何設置文件的緩沖
實際案例
將文件內容寫入到硬盤設備時,使用系統調用,這類I/O操作的時間很長,為了減少I/O操作的次數,文件通常使用緩沖區(有足夠多的數據才進行系統調用),文件的緩存行為,分為全緩沖、行緩存、無緩沖。
如何設置Python中文件對象的緩沖行文?
解決方案
全緩沖: open 函數的 buffering 設置為大于1的整數n,n為緩沖區大小
>>> f = open('demo2.txt', 'w', buffering=2048)>>> f.write('+' * 1024)>>> f.write('+' * 1023)# 大于2048的時候就寫入文件>>> f.write('-' * 2)>>> f.close()
行緩沖: open 函數的 buffering 設置為1
>>> f = open('demo3.txt', 'w', buffering=1)>>> f.write('abcd')>>> f.write('1234')# 只要加上/n就寫入文件中>>> f.write('/n')>>> f.close()
無緩沖: open 函數的 buffering 設置為0
>>> f = open('demo4.txt', 'w', buffering=0)>>> f.write('a')>>> f.write('b')>>> f.close()
如何將文件映射到內存?
實際案例
解決方案
使用標準庫中的 mmap 模塊的 mmap()
函數,它需要一個打開的文件描述符作為參數
新聞熱點
疑難解答