目录
1、什么是文件
2、两种重要的文件类型
2.1 文本文件的优缺点
2.2 二进制文件的优缺点
2.3 转换
3、文件的缓冲机制
3.1文件缓冲区
3.2缓冲机制的好处
4、文件基本操作
4.1 打开文件(open)
4.2.1 mode: 指定打开的文件方式 (str)=>text,bytes
4.3.1buffering:指定缓存方式(int)
4.4.1encoding: 文件的编码方式( str)
编辑4.5.1 小练习
4.2 关闭文件-用with语句打开(with open)
4.2.1读取文件内容
4.2.2 小练习
4.2.3文件对象其他方法
1、什么是文件
文件是存放在外部介质 (如硬盘、U盘) 上的一组完整信息的集合。这些信息可为各种文字、 图形、图像、电影、音乐,甚至包括病毒程序等。
2、两种重要的文件类型
文本文件(Text File):文本文件是可直接阅读的,使用记事本打开即可看到文件的内容。
二进制文件(Binary File):这类文件将数据按照它的进制编码的形式存储。如BMP。由 于这类文件内容是二进制编码,使用记事本打开是显然是乱码,BMP可用图片查看器解码。
2.1 文本文件的优缺点
优点:
输出内容友好,不需要手动转换。
缺点:
一个字符占一个字节,文件占用的存储空间较多,读写时需要转换(内存->显示), 访问的时效率不高 。
2.2 二进制文件的优缺点
优点:
二进制文件中的数据与数据的内存中的 表现形式一致。二进制文件在存储数据 时非常紧凑,占用存储空间较少;在读 写时不需要进行转换,具有较高的时间效率。
缺点:
二进制文件无法直接以字符形式输出,必须 要经过一个转换过程。
2.3 转换
bytes 转换:
bytes->str : decode('utf8')
str 转换:
str->bytes: encode('utf8')
encode编码时可指定任何合适的编码方式,但decode解码时,一定需要对应的编码方式。
3、文件的缓冲机制
读操作:不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据。
写操作:不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数 据写入磁盘。
3.1文件缓冲区
计算机系统为要处理的文件在内存中单独开辟出来的一个存储区间,在读写该文件时,做为数据交换的 临时“存储中转站” 。
3.2缓冲机制的好处
能够有效地减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异, 提高数据读写的效率。
4、文件基本操作
4.1 打开文件(open)
file : 要打开的文件名( str ) mode: 打开文件的方式( str ) => text, bytes encoding: 文件编码方式(str) errors: 当发生编码错误时的处理方式(str) --- 'ignore'或'strict'(默认) buffering: 缓存方式 ( int)>>> fd = open("gbk.txt",encoding="gbk")>>> fd.read()'你好,你好\n'>>> fd = open("gbk.txt",'w',encoding="gbk")>>> fd.write("这还是你")4>>> fd.flush()
4.2.1 mode: 指定打开的文件方式 (str)=>text,bytes
>>> fp = open("hyrz2.txt", 'ab')>>> fp.write(b"ddd\n")4>>> fp.flush()
4.3.1buffering:指定缓存方式(int)
0 实时写入,只能二进制模式时1 行缓存,只能文本模式时n 设置缓冲区大小为n*4096字节,溢出后追加到文件中4.4.1encoding: 文件的编码方式( str)
常见编码:
4.5.1 小练习
从网络上去下载图片保存到本地。
import requestsurl = "/uploads/0713j/818.jpg"imr = requests.get(url)imr2 = imr.contentwith open("图片.jpg","wb") as img:img.write(imr2)
4.2 关闭文件-用with语句打开(with open)
with open 相较于open,with open 用完时打开的文件会被自动回收。with语句块的代码执行完成之后,会自动关闭资源,回收资源--fp.close(),自动调用close。
4.2.1读取文件内容
>>> fp.read()'qdqd\n'>>> fp.read()''>>> fp.seek(0)0>>> fp.read()'wewew\nqdqd\n'>>> fp.seek(1)1>>> fp.read()'ewew\nqdqd\n'>>>
fp.seek(cookie, whence=0),cookie---偏移量 以字节为单位,whence-- 相对位置 0相对于当开始 1相对于当前 2--》末尾,末尾还有一个换行符。
>>> fp.read()'qdqd\n'>>> fp.read()''>>> 第二次读不到东西
fp.read()每次读写从光标的位置往后读写后(str)。
4.2.2 小练习
准备一个example.txt文件,里面随便写入些内容(如一首歌词)。
# 读前5行。# 读全文# 读取最后12字节=> str格式# 读取最后4个汉字=> str格式with open('example.txt', encoding='utf-8')as f:# 读前五行print("前五行".center(20,"-"))for i in range(5):print(f.readline().strip())# 读全文print("全文".center(20, "-"))f.seek(0)k = f.read()print(k)print("-".center(20, "-"))with open("example.txt",'br')as r:#读取最后12字节print("最后12字节:",r.read(r.seek(-12, 2)).decode("utf-8") )# 最后4个汉字(一个汉字等于三字节,最后四个汉字,取最后12字节)print("最后4个汉字:", r.read(r.seek(-12, 2)).decode("utf-8"))
4.2.3文件对象其他方法
如果觉得《Python的文件操作 open with open》对你有帮助,请点赞、收藏,并留下你的观点哦!