VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python中文件I/O高效操作处理的技巧

如何读写文本文件?

实际案例

某文本文件编码格式已直(如UTF-8,GBK,BIG5),在python2.x和python3.x中分别如何读取这些文件?

解决方案

注意区分python2和python3中的差别

字符串的语义发生了变化:

python2 python3
str bytes
unicode str


python2.x 写入文件前对 unicode 编码,读入文件后对二进制字符串解码

1
2
3
4
5
6
7
>>> 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 指定编码格式

1
2
3
4
5
6
7
8
>>> 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为缓冲区大小

1
2
3
4
5
6
>>> f = open('demo2.txt''w', buffering=2048)
>>> f.write('+' * 1024)
>>> f.write('+' * 1023)
# 大于2048的时候就写入文件
>>> f.write('-' * 2)
>>> f.close()

行缓冲: open 函数的 buffering 设置为1

1
2
3
4
5
6
>>> f = open('demo3.txt''w', buffering=1)
>>> f.write('abcd')
>>> f.write('1234')
# 只要加上\n就写入文件中
>>> f.write('\n')
>>> f.close()

相关教程