目录
前言
经过上次我对while循环和for循环的讲解大家应该已经可以使用while循环hefor循环。
今天我们来介绍一下python中的一些文件操作。使用python来读写文件是非常简单的操作。我们使用open()函数来打开一个文件, 获取到文件句柄。然后通过文件句柄就可以进行各种各样的操作了,根据打开方式的不同能够执行的操作也会有相应的差异。
打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使用的是r(只读)模式。
一.只读操作(r, rb)
f = open("美女写真.txt",mode="r", encoding="utf-8")
content = f.read()
print(content)
f.close()
需要注意encoding表示编码集。根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8。
rb读取出来的数据是bytes类型, 在rb模式下,不能选择encoding字符集。
f = open("c:\\python study\myobject-master\logo.png", mode="rb")
content = f.read()
print(content)
f.close()
注意:rb的作用是在读取非文本文件的时候. 比如读取MP3,图像,视频等信息的时候就需要用到rb。 因为这种数据是没办法直接显示出来的,在后面我们文件上传下载的时候还会用到。还有,我们看的直播,实际上都是这种数据。
通过上面俩段代码我打开的文件我想你们应该发现了问题这就是绝对路径和相对路径。
绝对路径:从磁盘根目录开始一直到文件名。
相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言. 如果在同一个文件夹中, 则相对路径就是这个文件名。如果在上一层文件夹,则要../
我们更推荐大家使用相对路径,因为在我们把程序拷贝给别人使用的时候,直接把项目拷贝走就能运行,但是如果用绝对路径,那还需要拷贝外部的文件。
读取文件的方法:
1.read()
将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃。
2. read(n)
读取n个字符,需要注意的是如果再次读取,那么会在当前位置继续去读而不是从头读, 如果使用的是rb模式,则读取出来的是n个字节。
f = open("c:\\python study\\abc\美女写真.txt", mode="r", encoding="utf-8")
content = f.read(6)
print(content)
f.close()
结果:
美女写真
1
3. readline()
一次读取一行数据, 注意: readline()结尾, 注意每次读取出来的数据都会有一个\n(\n换行符)。
f = open("c:\\python study\\abc\美女写真.txt", mode="r", encoding="utf-8")
content = f.readline()
content2 = f.readline()
print(content)
print(content2)
结果:
美女写真
123
4.循环读取
这种方式是组好的,每次读取一行内容,不会产生内存溢出的问题。
f = open("c:\\python study\\abc\美女写真.txt", mode="r", encoding="utf-8")
for line in f:
print(line.strip())
f.close()
结果:
美女写真
123
123
123456789
注意: 读取完的文件句柄一定要关闭 f.close()
二.只写操作(w, wb)
写的时候注意,如果没有文件,则会创建文件, 如果文件存在,则将原件中原来的内容删除, 再写入新内容。
f = open("c:\\python study\\abc\美女写真.txt", mode="w", encoding="utf-8")
f.write("想什么美女写真,好好学习。")
f.flush()# 刷新. 养成好习惯
f.close()
这样美女写真文件里面的内容就变成想什么美女写真,好好学习了。(不过你需要再次读取才能知道里面的内容)
wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据。
f = open("c:\\python study\\abc\美女写真.txt", mode="wb")
f.write("想什么美女写真,好好学习。".encode("utf-8"))
f.flush()# 刷新. 养成好习惯
f.close()
三.追加操作(a, ab)
只要是a或者ab, a+ 都是在文件的末尾写入,不论光标在任何位置。
在追加模式下我们写入的内容会追加在文件的结尾。
f = open("c:\\python study\\abc\美女写真.txt", mode="a", encoding="utf-8")
f.write("想什么美女写真,好好学习。")
f.flush()# 刷新. 养成好习惯
f.close()
这时候美女写真文件里的内容就变成想什么美女写真,好好学习。想什么美女写真,好好学习。两遍了。
至于ab和上面的wb一样用法我就不说了。
四.读写操作(r+, r+b)
对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了之后再进行写入. 我们以后使用频率最高的模式就是r+。
f = open("c:\\python study\\abc\美女写真.txt", mode="r+", encoding="utf-8")
content = f.read()
f.write("我一定好好学习不看美女写真。")
print(content)
f.flush()
f.close()
结果:正常的读取之后, 写在结尾
就是说这是美女写真文件里的内容是想什么美女写真,好好学习。想什么美女写真,好好学习。
我一定好好学习不看美女写真。但是给出的结果没有我一定好好学习不看美女写真。
记住r+模式下,必须是先读取,然后再写入,否则想写的内容就会写在开口。
还有一些其他的带b的操作,就不多赘述了,就是把字符换成字节,仅此而已。
大家如果有什么问题评论区提出。
点个关注不迷路,持续更新中......