赞
踩
什么是文件
文件是存放在外部介质 (如硬盘、U盘) 上的一组完整信息的集合。这些信息可为各种文字、 图形、图像、电影、音乐,甚至包括病毒程序等
两种重要的文件类型
文本文件(Text File
文本文件是可直接阅读的,使用记事本打开即可看到文件的内容。
二进制文件(Binary File)
这类文件将数据按照它的进制编码的形式存储。如BMP,由 于这类文件内容是二进制编码,使用记事本打开是显然是乱码,BMP可用图片查看器解码
文本文件和二进制文件的优缺点
无论什么类型的文件,在硬盘/内存=> 二进制
文本方式读:内存->看(转换)
二进制方式读: 内存-> 看到一致
python3 字符串类型
bytes bytes --->b abc' 表示二进制
转换:bytes->str :decode('utf8')
str
转换: str->bytes:encode('utf8')
注意:encode编码时可指定任何合适的编码方式,但decode解码时,一定需要对应的编码方式
文件的缓冲机制
读操作:不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据
写操作:不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘
文件缓冲区
计算机系统为要处理的文件在内存中单独开辟出来的一个存储区间,在读写该文件时,做为数据交换的 临时“存储中转站” 。
缓冲机制的好处
能够有效地减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异, 提高数据读写的效率
文件的基本操作
访问文件操作过程
打开文件
读取文件
将信息读到内存
写入文件
关闭文件
保存文件并释放内存空间
常见编码
ASCII ---常见英文字符
Unicode ---万国码 只是给你一个编号,比如中文一个字在Unicode里面占两个字节但是在UTF - 8中占三个字节
UTF - 8 GBK ---是Unicode编码的具体实现方式,决定他在内存s中怎么去存储
UTF - 8 一个中文字符占三个字节
GBK国标码 ---一个中文占两个字节
>>> "中".encode("utf-8") b'\xe4\xb8\xad' >>> "中".encode("gbk") b'\xd6\xd0'
判断文件编码-chardet模块
import chardet str = "python".encode('gbk') result = chardet.detect(str) print(result) 输出: {'encoding': 'ascii', 'confidence': 1.0, 'language': ''} #encoding的值显示为ascii,表示编码是ascii编码,由于gbk是属于ascii编码的一种,所以encoding的值就为ascii,后面的confidence是检测率,language是语言 #以什么方式加码就要以什么方式解码,不然会失败 >>> "中".encode("gbk").decode("gbk") '中' >>> "中".encode("gbk").decode("utf-8") Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
python2和python3的不同
python2的编码是ASCII码
python3的默认编码是UTF - 8
打开文件(open)
格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file 要打开的文件名或路径
mode 打开文件的方式 => text, bytes
encoding 文件的编码方式
errors: 当发生编码错误时的处理方式
'ignore'或'strict'(默认
buffering 缓存方式
文件的打开
读(r)
写(w)
覆盖写,没有的话会新建文件
追加写(a)
没有的话会新建文件
新建写入(x)
文件如果有了的话会报错
带加号就是读写的方式r+,w+,a+
文件打开类型
文本类型\二进制类型
默认是以只读方式文本类型打开常见编码
文件的读取
fp.read()
只会从光标的位置开始读,读了一遍之后光标到最后,在读的话就都读不到内容
read读的字符数
seek(偏移量,位置)
定位光标位置,按照字节来的
移动光标的位置,有两个参数,0表示开头,1表示当前2表示末尾,1和2只能在二进制条件下使用
fp.readline()
每一次读一行,无参数
从光标位置读到行末
fp.readlines()
从光标位置读到文件末尾,把每一行作为一个元素存入列表,可以有参数
fp.tell() 告诉你光标现在在哪个字节
for i in fp: 循环读取文件fp内的内容, 每次只读一行数据 fp.read(60000) 每次读60000个字符 fp.readlines(60000) 每次读60000个字符所在的所有行
文件的写入
f.write( )
fp.write 返回字符数,不是字节数
为什么不实时写入磁盘
硬盘是慢设备,频率读写会增大磁盘压力,产生瓶颈
什么时候真正写入磁盘
缓冲区满了
进程关闭
强制刷新 flush
fp.flush()强制将缓存中的数据刷新到磁盘中去
文件关闭 close
文件的关闭
f.close()
用with语句打开
#with 语句管理 with语句体中的内容执行结束可以自动释放与fp的链接 with open("sing","r") as fp: for i in fp:
文件对象其他方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。