Python168的学习笔记4
关于普通文本文件的读写
python2.7中,未注明的字符都是以acsii来编码的,而要让字符能够通用,必须声明为unicode。
s=u'你好',s.encode('utf8')就是指用utf8来进行编码,同样s.decode('utf8)就是用utf8来解码。
实例操作
#coding:utf8
f = open('py2.txt','w')
s = u'你好'
f.write(s.encode('gbk'))
f.close() f=open('py2.txt','r')
t = f.read()
print t
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()。
总结二进制文件操作:
理解写入文件的缓存概念。块缓存就是当字节数达到块的容量大小才会写入到硬件,行缓存是以换行符为标志,无缓存则是立即写入。
文件映射到内存,就是在内存操作,文件同步变化。使用mmap。这部分先略过。
关于访问文件的状态,使用stat和os库中的。略过。
使用临时文件来节省内存,临时文件被关闭后就回收内存了。略过。
Python168的学习笔记4的更多相关文章
- Python168的学习笔记8
#coding:utf8 #斐波那契数列,第三项起,每一项都等于前两项之和 def memo(func): cache = {}#闭包 def wrap(*args): if args not in ...
- Python168的学习笔记7
关于多线程操作. 对于IO操作,如访问网站,写入磁盘这种需要时间等待响应的操作,多个cpu也几乎不能提高效率. 对于CPU密集型操作,如这个格式转换,可以通过多个cpu同时去进行. 但是对于pytho ...
- Python168的学习笔记6
如何派生内置不可变类型并修改实例化行为. 个人理解,如何派生出自己想要的类. class IntTuple(tuple): def __new__(cls,iterable): g = (x for ...
- Python168的学习笔记5
关于对csv文件的操作. python标准库中有csv的库,使用非常方便. import csv with open('pingan.csv','rb') as rf: reader = csv.re ...
- Python168的学习笔记3
list.extend(),可以拓展list,a=(0,1),b=(2,3) a.extend(b),a就变成(0,1,2,3) 分割字符串(除去字符串中的,\/;之类的),如果用str.split( ...
- Python168的学习笔记2
关于for循环,其实质是利用被循环对象的__iter__,或者__getitem__属性接口,由可迭代对象得到迭代器.for循环就是不断调用.next(),直到最终捕获到stop. import re ...
- Python168的学习笔记1
在对list的条件选择有两种常用方法,直接使用filter函数,就是filter(func,sequence);另外一种就是迭代操作,类似 x for x in sequence func.这两种方法 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- LINUX vim 修改文件 退出
vim 保存退出, 先按ESC ,然后:wq(保存退出)W:write,写入 Q:quit,退出, 也可以直接输入X,代表WQ,也是保存退出 或者 先按ESC,再按shift+ZZ 也是保存退出 正常 ...
- [NOI2007]货币兑换 「CDQ分治实现斜率优化」
首先每次买卖一定是在某天 $k$ 以当时的最大收入买入,再到第 $i$ 天卖出,那么易得方程: $$f_i = \max \{\frac{A_iRate_kf_k}{A_kRate_k + B_k} ...
- liunx系统top命令详解
ps: 1.按1可以进行 CPU各个和总CPU汇总的切换2.cpu0是最关键的,总控管理各个CPU 3.默认情况下仅显示比较重要的 PID.USER.PR.NI.VIRT.RES.SHR.S.%CPU ...
- No.15 selenium for python JavaScript
JS处理滚动条 一.上下滚动 1.滚动条回到顶部: js="var q=document.documentElement.scrollTop=10000" driver.execu ...
- 耗时任务DefaultEventExecutorGroup 定时任务
一. 耗时任务 static final EventExecutorGroup group = new DefaultEventExecutorGroup(16); // Tell the pipel ...
- AngularJs(SPA)单页面SEO以及百度统计应用(上)
只有两种人最具有吸引力,一种是无所不知的人,一种是一无所知的人 问:学生问追一个女孩总是追不上怎么办?回答:女孩不是追来的,是吸引来的,你追的过程是吸引女孩的过程,如果女孩没有看上你,再追都是没有用的 ...
- matlab设定mex接驳的C/C++编译器
使用C/C++编写核心算法,使用matlab调用算法.做上层封装,通常是提升效率并提供易用性的一个不错的选择. mex需要设定接驳的C/C++编译器,官方文档在这里:https://ww2.mathw ...
- 树莓派3B安装远程
步骤1:树莓派3安装 RDP SERVER 及VNC SERVER sudo apt-get install -y tightvncserver sudo vncserver 最后才知道一定要加上VN ...
- 标准C++中的String类的使用
要使用标准C++中的String类,必须包含#include<string>(注意不是<string.h>带.h的是C语言中的头文件) 作者:耑新新,发布于 博客园 转载请注 ...
- Zabbix的通知功能以及自定义脚本告警
本节内容: Zabbix的通知功能 定义接收告警的用户 定义Action Zabbix自定义脚本发送报警邮件 一.Zabbix的通知功能 在配置好监控项和触发器之后,一旦正常工作中的某触发器状态发生改 ...