关于普通文本文件的读写

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. 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)

    使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...

  2. python socket编程入门级

    客户端 import socket import time sk = socket.socket() # 第一步:创建socket对象 address = ('127.0.0.1', 8080) # ...

  3. Intel大坑之一:丢失的SSE2 128bit/64bit 位移指令,马航MH370??

    缘由 最近在写一些字符串函数的优化,兴趣使然,可是写的过程中,想要实现 128bit 的按 bit 逻辑位移,遇到了一个大坑,且听我娓娓道来. 如果要追究标题,更确切的是丢失的SSE2 128 bit ...

  4. Java WebService Axis 初探

    最近在学习WebService 开始了: 一:服务端的编写与发布 1. 工具准备: java的开发环境(这里就不多说了).   axis2官网上下载最新的就可以了(我这里用的是axis2-1.4.1- ...

  5. Linux基础 - tmux

    安装 yum install tmux 类似vim当中存在命令行模式以及编辑模式,从编辑模式进入命令行模式需要先按ESC键,在tmux当中进行操作也要先准备好"姿势"再操作,默认情 ...

  6. GreenPlum学习笔记:split_part与string_to_array字符截取

    偶遇一个需求:想按某个指定符号分割之后,提取字符. 例如:tag = '休闲,娱乐,运动,玩耍',想提取"休闲"这个词. 方法一:string_to_array select st ...

  7. Django数据库数据表操作

    建立表单 django通过设置类来快速建表,打开models.py 例: from __future__ import unicode_literals from django.db import m ...

  8. Redux-DevTools 安装

    以下以Chrome为准. 首先,从Chrome Web Store(需要***支持)下载chrome 插件 Redux DevTools. 使用方式有两种: 一种只需在代码createStore中添加 ...

  9. IdentityServer4揭秘---登录

    IdentityServer4默认提供了的登录地址是Account/Index 同意页面是Consent/Index 这里我们可以通过IdentittyServer4的用户交互自定义配置设置 在Con ...

  10. #JS Ajax的error函数

    使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理, 一般error函数返回的参数有三个: function(jqXHR jqXHR, String ...