当前位置:网络安全 > python技巧(19)

python技巧(19)

  • 发布:2023-09-09 17:38

流形式:按字节多少来读写的,read和write方法

I/O操作:按块写入读入,有的不足块和足块一次I/O所耗时间是一样的(不是按字节写入的),所以只有减少操作的次数,那么可以用缓冲区。
全缓冲:只有块充满了,才执行 I/O
行缓冲:碰到换行符,执行I/O
无缓冲:直接执行I/O
块大小和平台决定了缓冲区大小
一、全缓冲
1.python默认的全缓冲:块的大小为4096个字节

>>>f=open('C:\\Users\\yongsheng\\Desktop\\a.txt','w')
>>> f.write('abc')#打开是没看到写入
>>> f.write('+'*4093)#打开时没看到写入
>>> f.write('-')#此时打开看到写入了,原因时块被填满了,按块写入到文件中了

2.修改全缓冲区大小(块大小)

>>>f=open('C:\\Users\\yongsheng\\Desktop\\a.txt','w',buffering=2048)
>>> f.write('%'*2048)
>>> f.write('lll')

二、行缓冲

>>>f=open('C:\\Users\\yongsheng\\Desktop\\a.txt','w',buffering=1)
>>> f.write('%'):没有写入
>>> f.write('lll/n'):只要遇到/n就写入

三、无缓冲

>>>f=open('C:\\Users\\yongsheng\\Desktop\\a.txt','w',buffering=0)
>>> f.write('%'):打开看到写入了
>>> f.write('8'):只要写入就能看到

文件映射,由于read和write按字节读写,需要用seek指针来定位置,对于某些二进制文件就比较麻烦,因此希望有一种缓冲方式把文件映射到一个数组中

1.如前面

>>>f=open('C:\\Users\\yongsheng\\Desktop\\a.txt','r')
>>>f.readinto(buffer=array.array('h',(x for x in xrange(10))))

2.mmap()函数
文件描述符:由系统的open函数得到的(www.sychzs.cn())
文件描述符1:
import os
s=www.sychzs.cn(‘dema.bin’,’r+b’):
文件描述符2:
f=open(‘dema.bin’,’r+b’):r和r+:后者可以读写
s=f.fileno():得到文件描述符
读入缓冲数组M中:
M=mmap.mmap(f.fileno(),length=0,access=mmap.ACCESS_WRITE ,offset=mmap.PAGESIZE)
M[0]=’\x00’
M[0:10] 切片
待完善

相关文章