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. 整体架构图 ...
随机推荐
- 触发器Demo
--mysql 触发器简单实例 --创建表1 )) ; --创建表2 )); --创建触发器,表一增加数据时,表二自动增加数据 create trigger t_afterinsert_on_tab1 ...
- j-linkV8固件更新(任意版本)
在使用j-link v8调试程序时,容易出现固件丢失或出错的情况,导致电脑不能识别,j-link上面的灯不亮.我今天刚刚遇到了这个情况,于是就拆开外壳,在网上搜索资料,发现刷固件相关的还真多,但是有一 ...
- django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
一.GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为. 提供的每个具体通用视图都是一个GenericAPIView或多个mixin类 ...
- 04 Effective Go 高效的go语言 重点内容
Effective Go 高效的go语言 Introduction 介绍 Examples 例子 Formatting 格式 Commentary 评论 Names 名字 Package names ...
- 分布式git
分布式 Git 你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉 了基本 Git 命令.你现在可以学习如何利用 Git 提供的一些分布式工作流程 ...
- webpack轻松入门教程
webpack之傻瓜式教程及前端自动化入门 接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpa ...
- IOS使用命令行打包
1.安装证书 develop:调试证书,包含调试信息 安装时需要证书已加入设备UDID或是越狱设备才能安装. distribution:正式证书,发布到appstore所用,屏蔽了调试信息,要想测试安 ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
- ld 脚本浅析-LD手册粗糙翻译
本文乃转载, 我在其基础上做了少量修改. 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents 1. 概论2. 基本概念 ...
- WeifenLuo.WinFormsUI.Docking"的使用
要用 WeifenLuo.WinFormsUI.Docking 首先要下载: WeifenLuo.WinFormsUI.Docking 在当前工程“解决方案 - 引用”中 >> 右击引用 ...