关于普通文本文件的读写
python2.7中,未注明的字符都是以acsii来编码的,而要让字符能够通用,必须声明为unicode。
s=u‘你好‘,s.encode(‘utf8‘)就是指用utf8来进行编码,同样s.decode(‘utf8)就是用utf8来解码。
实例操作
1 #coding:utf8 2 f = open(‘py2.txt‘,‘w‘) 3 s = u‘你好‘ 4 f.write(s.encode(‘gbk‘)) 5 f.close() 6 7 f=open(‘py2.txt‘,‘r‘) 8 t = f.read() 9 print t 10 print t.decode(‘gbk‘)
文本里面存储正确。第一个t输出是乱码,第二个t是对的。
关于处理二进制文件。以wav音频文件为例,其文件头部的44个字节是对wav的定义,参数,其44之后的字节就是data 类了。
可以用struct.unpack(type,data)来对文件头进行解析以获得相应的参数。type根据字段的长度,比如2个字节,用h;4个字节,用i。data可以直接从文件头切片出来。
对data类的操作,需要创建特定的数组来存放。用arry.arry(type,iter),type指这个数组的类型,iter指初始化数组的迭代器。
先用f.seek(0,2)移到文件的末尾,然后f.tell()就可以得到文件的总字节数。数组的长度就等于 总字节数减去文件头的44个字节,然后再除以bitspersample(每个数据样本的长度,在wav中这个值是2)。所以,最后就可以用arry.arry(‘h‘,(0 for _ in xrange(n)))来创建这个数组了。注意操作文件指针回到data类,也就是f.seek(44),然后再用f.readinto()来将数据读入到数组中去。这样就可以对数据进行操作了。
关于将操作后的数据写入文件:f = open(‘test.wav‘,‘wb‘),先写入文件头,也就是那44个字节,f.write(info),然后导入数据buf.intofile(f)就完成了,最后记得f.close()。
时间: 2024-10-13 01:33:11