python-17-如何读取文本文件?如何处理二进制文件?如何设置文件的缓冲?

xiaoxiao2021-02-27  212

前期由于计算机是由美国人发明的,所以ACSII,一个字节代表一个字符,字符串抽象的是连续的字节。 后来为了支持各国语言,发明了各种编码格式。unicode才是真正意义上的字符串

s = u'你号' 编码(unicode转换成str) print(s.encode('gbk')) print(s.encode('utf8')) 四个字节 b'\xc4\xe3\xba\xc5' 六个字节 b'\xe4\xbd\xa0\xe5\x8f\xb7' 解码 python3默认的文本字符串为unicode格式,因此文本字符串没有decode方法

python2 中 ‘dadsdasdsa’ 相当于 python3 中 b’dadsdasdsa’ python2 中 u’您好’ 相当于 python3 中 ‘您好’

t文本模式,不用填写,自带。 读取的也是字节,只不过是自动编码和解码

处理二进制文件:

使用read获取头部44个字节:

b表示二进制模式

struct.unpack('数据类型','待解析二进制字符串')

声道数, 采样频率, 采样点用多少个比特编码

对于数据,最好不要是字符串形式,因为字符串不能支持数学运算,不方便我们特别处理,最好使用数组存储.

我们首先要获得数据的总长度,就是(文件的总长度-头信息长度)/2

import array f.seek(0,2) seek(offset[, whence]) 方法用于移动文件读取指针到指定位置。whence:0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。 f.tell() n = ((f.tell() - 44)/2)

把采样缩小一定的程度(声音变小)

设置文件的缓冲: I/O操作:系统调用->向操作系统申请服务->创建响应,调用硬件的驱动程序 磁盘块设备:读写不是以字节依次读写完成的,但是按照块依次读写完成的。 所以说一个1字节的块和一个4096字节的块都需要I/O操作,用时也是相同的。

全缓冲就是当输入或输出时,当缓冲区被填满了之后,才会进行实际的I/O操作。注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲。当在输入或输出中遇到换行符时,才进行实际I/O操作。Linux下标准输出默认是行缓冲。注意,当流涉及终端的时候,通常使用的是行缓冲。标准I/O库不进行任何字符缓冲,任何读写都是即时可见的。注意,标准出错流stderr通常是无缓冲的。 tail -f demo.txt来观察文件内容 f = open('demo.txt','w') f.write('abc') 写入到缓冲区当中,通常一个块是4096个字节。 f.write('+'*4093) 还是没有输出,刚刚好4096个字节 f.write('1') 输出了,如图。这就是普通文件默认的输出行为。

f = opne('demo2.txt','w',buffering=2048) f.write('+' * 2047) 没反应 f.write('-' * 2)

行缓冲行为:

f = opne('demo3.txt','w',buffering=1) f.write('+' * 10) 没反应 f.write('-' ) 没反应 f.write('\n') 写入磁盘

转载请注明原文地址: https://www.6miu.com/read-8849.html

最新回复(0)