python 文件操作
一、文件操作的函数
open("文件名(路径)",mode="?",encoding="字符集")
模式
r ,rb 只读
w,wb 只写
a,ab 追加
r+ 读写
w+ 写读
a+ 写读(追加写读)
二 只读(r,rb)
1.只读(r,rb)
f = open("aaa.txt",mode="r", encoding="utf-8") content = f.read() print(content) f.close()
rb 读取出来的是bytes类型,在rb模式下,不能选择encoding字符集
f = open("aaa.txt",mode="rb" ) content = f.read() print(content) f.close()
rb用来读取非文本的文件,比如MP3,图片,视频等 因为这种数据是没办法直接显示出来的. 在后面我们文件上传下载的时候还会用到. 还有我们在看的直播,实际都是这种数据。
2.绝对路径和相对路径:
1. 绝对路径:从磁盘根目录开始一直到文件名.
2. 相对路径:同一个文件夹下的文件. 相对于当前这个程序所在的文件夹而言. 如果在同
一个文件夹中. 则相对路路径就是这个文件名. 如果在上一层文件夹. 则要../
推荐使用相对路径
3.文件操作的方法
1.read()
将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃
f = open("bbb.txt", mode="r", encoding="utf-8") content = f.read() print(content)
2.read(n)
读取n个字符,需要注意的是,如果再次读取,那么会在当前位置去读而不是从读,如果使用的是rb模式。则读取出来n个字节
f = open("bbb.txt", mode="r" encoding="utf-8") content = f.read(4) print(content)
3.readline() 一次读取一行数据,注意:readline()结尾,注意每次读出来的数据都会有一个\n,需要使用strip()方法去掉\n或空格
f = open("ccc.txt", mode="r", encoding="utf-8") content1 = f.readline() content2 = f.readline() content3 = f.readline()
4.readlines()将每一行形成一个元素,放到一个列表中,将所有的内容读取出来,容易导致内存崩溃,不推荐使用
f = open("ccc.txt", mode="r", encoding="utf-8") lst = f.readlines() print(lst) for line in lst: print(line.strip())
5.循环读取 ,这种方法是最好的,每次读取一行内容,不会产生内存溢出问题
f = open("ccc.txt", mode="r", encoding="utf-8") for line in f: print(line.strip())
读取完的文件句柄一定要关闭 f.close()
三、写模式(w,wb)
写的时候,如果没有文件,则会创建文件,如果文件存在,则将原来的内容删除再写入新内容
f = open("xxx", mode="w", encoding="utf-8") f.write("asdf") f.flush() # 刷新 f.close()
四、追加(a,ab)
在追加模式下,我们写入的内容会追加在文件的结尾
f = open("zzz", mode="a", encoding="utf-8") f.write("asdf") f.flush() f.close()
五、读写模式(r+,r+b)
对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完了之后再进行写入,我们以后使用频率最高的模式就是r+
f = open("zzz", mode="r+", encoding="utf-8") content = f.read() f.write("asdf") print(content) f.flush() f.close()
六、写读(w+,w+b)
先将所以的内容清空,然后写入,最后读取,但是读取的内容是空的,不长用
f = open("zzz", mode="w+", encoding="utf-8") f.write("asdf") content = f.read() print(content) f.flush() f.close()
七、追加读(a+)
a+模式下,不论先读还是后读,都是读取不到数据的。
f = open("zzz", mode="a+", encoding="utf-8") f.write("asdf") content = f.read() print(content) f.flush() f.close()
八、其他操作
1. seek(n) 光标移动到n位置,注意,移动的单位是byte
移动到开头:seek(0)
移动到结尾:seek(0,2)
2. tell() 使用tell() 可以帮我们获取到当前光标在什么位置
3. truncate() 截断文件
九、修改文件
文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件名改为源文件名
import os with open("alex.txt",mode="r",encoding="utf-8") as f1,\ open("alex_副本.txt",mode="w",encoding="utf-8") as f2: for line in f1: line = line.replace("alex","sb") f2.write(line) os.remove("alex.txt") os.rename("alex_副本.txt","alex.txt")