关于普通文本文件的读写

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的更多相关文章

  1. Python168的学习笔记8

    #coding:utf8 #斐波那契数列,第三项起,每一项都等于前两项之和 def memo(func): cache = {}#闭包 def wrap(*args): if args not in ...

  2. Python168的学习笔记7

    关于多线程操作. 对于IO操作,如访问网站,写入磁盘这种需要时间等待响应的操作,多个cpu也几乎不能提高效率. 对于CPU密集型操作,如这个格式转换,可以通过多个cpu同时去进行. 但是对于pytho ...

  3. Python168的学习笔记6

    如何派生内置不可变类型并修改实例化行为. 个人理解,如何派生出自己想要的类. class IntTuple(tuple): def __new__(cls,iterable): g = (x for ...

  4. Python168的学习笔记5

    关于对csv文件的操作. python标准库中有csv的库,使用非常方便. import csv with open('pingan.csv','rb') as rf: reader = csv.re ...

  5. Python168的学习笔记3

    list.extend(),可以拓展list,a=(0,1),b=(2,3) a.extend(b),a就变成(0,1,2,3) 分割字符串(除去字符串中的,\/;之类的),如果用str.split( ...

  6. Python168的学习笔记2

    关于for循环,其实质是利用被循环对象的__iter__,或者__getitem__属性接口,由可迭代对象得到迭代器.for循环就是不断调用.next(),直到最终捕获到stop. import re ...

  7. Python168的学习笔记1

    在对list的条件选择有两种常用方法,直接使用filter函数,就是filter(func,sequence);另外一种就是迭代操作,类似 x for x in sequence func.这两种方法 ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. ip分片重组 ip_defrag

    在ip_local_deliver中,如果检测到是分片包,则需要进行分片重组: ip_local_deliver |-->ip_is_fragment //判断是否为分片包 |-->ip_ ...

  2. Tslib移植与分析【转】

    转自:http://blog.csdn.net/water_cow/article/details/7215308 目标平台:LOONGSON-1B开发板(mips32指令集)编译平台:x86PC-- ...

  3. python3中内建函数map()与reduce()的使用方法

    map()的使用    map()的使用方法形如map(f(x),Itera).对,它有两个参数,第一个参数为某个函数,第二个为可迭代对象.如果不懂什么是函数,不懂什么是可迭代对象没关系,记住下面的例 ...

  4. go语言项目汇总

    Horst Rutter edited this page 7 days ago · 529 revisions Indexes and search engines These sites prov ...

  5. Hadoop(三):MapReduce程序(python)

    使用python语言进行MapReduce程序开发主要分为两个步骤,一是编写程序,二是用Hadoop Streaming命令提交任务. 还是以词频统计为例 一.程序开发1.Mapper for lin ...

  6. ubuntu下将程序挂后台命令

    ubuntu下将程序挂后台命令 nohup python -u main.py > test.out 2>&1 & ubunut下查看后台进程 jobs -l

  7. js数组基本操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtm ...

  8. ubuntu12.04安装ruby2.3

    为了搭建github-pages博客,而github-pages后端依赖于ruby,且对版本有严格要求,自己尝试了各种姿势升级ruby2.3无果,最终在查阅了各种资料之后找到一个可行方案. icebu ...

  9. 20165203 学习基础和C语言基础调查

    一.技能学习经验及体会 对于课外技能来说,我对很多领域都略知一二,但涉足不深,例如体育领域.摄影领域.绘画领域.书法领域等等,我所能拿得出手的就是体育领域的乒乓球了.娄老师的作业题目让我的思绪又回到了 ...

  10. getch与getchar区别

    getch(): 所在头文件:conio.h 函数用途:从控制台读取一个字符,但不显示在屏幕上 getchar(): 所在头文件:stdio.h getch与getchar基本功能相同,差别是getc ...