文件:存放在外部介质(如硬盘,U盘)上的一组完整信息的集合。这些信息可为各种文字、 图形、图像、电影、音乐,甚至包括病毒程序等。

两种重要的文件类型:
1.文本文件(Text File)
可直接阅读,使用记事本打开就能看到文件的内容。
2.二进制文件(Binary File)
将数据按照它的二进制编码形式存储。如BMP。由于文件内容是二进制编码,使用记事本打开显然是乱码,BMP可用图片查看器解码。

文本文件与二进制文件的优缺点:
python09_文件操作_第1张图片
无论什么类型的文件,在硬盘/内存=>二进制
文本方式读:内存---->看(转换)
二进制方式读:内存--->看到一致

python3中的字符串类型:
1)bytes-->str : decode("utf8")
2)str-->bytes : encode("utf8")
PS:encode编码时可指定任何合适的编码方式,但decode解码时,一定需要对应的编码方式

文件缓冲区:计算机系统为要处理的文件在内存中单独开辟出来的一个存储区间,在读写该文件时,作为数据交换的临时“存储中转站”。
缓冲机制的好处:能够有效减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异,提高数据读写的效率。

访问文件操作过程:打开文件->读取文件---将信息读到内存->写入文件->关闭文件----保存文件并释放内存空间
打开文件(open)-----内建函数
python09_文件操作_第2张图片
• file : 要打开的文件名( str )
• mode: 打开文件的方式( str ) => text, bytes
• encoding: 文件编码方式(str)
• errors: 当发生编码错误时的处理方式(str) 'ignore'或'strict'(默认)
• buffering: 缓存方式 ( int)

buffer补充:
(转载出处:https://blog.csdn.net/uytrrfg/article/details/83583169))
参数buffering是一个可选的参数,用来表示缓冲区的策略选择。设置为0时,表示不使用缓冲区,直接读写,仅在二进制模式下有效。设置为1时,表示在文本模式下使用行缓冲区方式。设置为大于1时,表示缓冲区的设置大小。如果参数buffering没有给出,使用默认时,会采用下面策略来选择:
1)对于二进制文件模式时,采用固定块内存缓冲区方式,内存块的大小根据系统设备的分配的磁盘块来决定,如果获取系统磁盘块的大小失败,就使用内部常量io.DEFAULT_BUFFER_SIZE定义的大小。一般的操作系统上,块的大小是4096或者8192字节大小。
2)对于交互的文本文件(采用isatty()判断为True)时,采用一行缓冲区的方式。其它文本文件使用跟二进制一样的方式。

打开文件-文件编码
• encoding: 文件的编码方式( str )
• encoding的默认值:None, 不同的平台打开的方式不一样

常见编码
python09_文件操作_第3张图片

判断文件编码-chardet模块
安装:pip install chardet
检测:python09_文件操作

打开文件-模式mode
python09_文件操作_第4张图片

关闭文件-with语句(with会帮忙管理这个文件的close情况)
python09_文件操作_第5张图片

读取文件内容
python09_文件操作_第6张图片
如:f.seek(4,0)重置光标位置,表示光标重置到0位置时偏移4个位置开始读写等操作
f.readlines()表示将当前位置到文末读取的文件内容以列表的格式输出
f.readline()表示将当前内容到行末的内容打印出来

写文件:f.write('something')
为什么不实时写入磁盘:硬盘是慢设备,频繁读写会增大磁盘压力,产生瓶颈
什么时候会写入磁盘(即什么时候会关闭):
• f.flush() -----强制刷新
• f.close() -----关闭文件
• buffer设置(默认:io.DEFAULT_BUFFER_SIZE )
• 0 => 实时写入 (binary mode)
• 1 => 行缓存 ( text mode) => \n
• 其他数字n => 缓冲区大小n : 2*4096

文件对象其他方法:
python09_文件操作_第7张图片