python一些 文件操作

如何读写文本文件

python2中文本文件读写

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'))

python3中文本文件读写

f = open("py3.txt","wt",encoding='utf8')
f.write("你好")
f.close()


f = open("py3.txt","rt",encoding='utf8')
s = f.read()
print(s)

#自动帮助我们完成了编解码,其实读取写入的还是字节

如何处理二进制文件?

以WAV格式为例子

wav是一种音频文件的格式,为二进制

前44字节为头部信息

包括 声道数 采样频率 PCM位宽等等

后面是音频采样数据

使用 vlc demo.wav播放

f = open('demo.wav','rb')

#头部信息
info =  f.read(44)
import struct
shengdaoshu = struck.unpack('h',info[22:24])
# h 小段字节序
caiyangpinlv = struck.unpack('i',info[24:28])
# int
bianmakuandu = struck.unpack('h',info[34:36])


import array
f.seek(0,2)
f.tell()
n=(f.tell()-44)/2
buf = array.array('h',(0 for _ in xrange(n)))
f.seek(44)
f.readinto(buf) # 把数据读入buf中


for i in xrange(n):buf[i] /=8
f2 = open('demo2.wav','wb')
f2.write(info)
buf.tofile(f2)
f2.close()

如何设置文件的缓冲

IO操作

磁盘是属于块设备

写入一个字节 和 写入4096个字节 耗时是一样的

文件的缓冲分为

全缓冲 ,缓冲区有一定大小,满足条件

行缓冲,终端换行符

无缓冲,串口设备,时时的。

f = open("",buffering=2048) 全缓冲

f = open("",buffering=1)   行缓冲

f = open("",buffering=0)   无缓冲

如何将文本映射到内存

应用场景

1.将整个文件 映射到内存中,像访问数组一样访问文件

当修改数组的时候,文件也同时被修改

2.某些嵌入式设备,我们映射 /dev/mem某范围

3.多个进程映射同一个文件,还能实现进程通信的目的

#创建一个二进制文件
dd if=/dev/zero of=demo.bin bs=1024 count=1024

#16进制查看这个文件
od -x demo.bin

import mmap
f = open('demo.bin','r+b')
#文件描述符,0是整个文件。access 写权限
m = mapp.mapp(f.fileno(),0,access=mmap.ACCESS_WRITE)

m[0] = '\x88'
m[4:8] = '\xff' * 4 

offset = 内存页的整数倍

如何访问文件的状态

1 文件类型

2 文件的访问权限

3 文件的最后访问 修改 节点状态

4 文件的大小…等等

使用os 系统调用  stat fstat lstat
import os
import stat
s = os.stat('a.txt')
stat.S_ISDIR(s.st_mode) #判断是否为文件夹
stat.S_ISREG(s.st_mode)


快捷函数
os.path.isdir('x.txt')

os.path.islink('x.txt')

os.path.isfile('x.txt')

三个时间
getatime  getctime  getmtime
普通文件大小
getsize

如何使用临时文件

传感器每收集1G数据,进行数据分析

如果常驻内存,消耗大量的内存资源

使用临时文件,不需要命名,且关闭后会被删除掉

from tempfile import TemporaryFile,NamedTemporaryFile

f = TemporaryFile()

f.write('abcde'*1000)

只能由对象f来访问,不能由系统路径来访问

ntf = NamedTemporaryFile()
ntf.name
# /tmp/tmp8Zs8Rc 临时文件创建在这个下面

临时文件关闭后,会被删除

不删除的话, ntf = NamedTemporaryFile(delete=False)

猜你喜欢

转载自blog.csdn.net/sunt2018/article/details/84728638