如何读写文本文件?
实际案例
某文本文件编码格式已直(如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()
函数,它需要一个打开的文件描述符作为参数
新闻热点
疑难解答