一、文件操作介绍
使用python来读写文件时非常简单的操作,使用open()函数打开一个文件,获取到文件句柄,然后就可以通过文件句柄进行相关操作。(需根据打开文件方式进行相应操作)
打开文件方式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b.(不带b的是对文本文件操作;带b的是对非文本文件操作,如音乐、视频等),默认使用的是r模式。
二、只读操作(r,rb)
1.r模式:
f = open("文件名",mode = "r",encoding = "utf-8") #获取句柄
content = f.read()
print(content)
f.close() #关闭句柄
注:encoding表示编码集,根据文件的实际保存编码进行获取数据。更多使用的是utf-8(pytharm)
注:这里的文件名也包括文件的路径,推荐使用相对路径。
注:当句柄使用结束后,一定记得关闭句柄。
2.rb模式
f = open("文件名",mode = "rb") #获取句柄,rb读取数据类型是bytes类型,此时不能选择encoding编码集。
content = f.read()
print(content)
f.close() #关闭句柄,结果为文件内容的二进制码。
3.补充
f.read(n) r模式读取n个字符(rb模式读取n个字节),下次再读取时,从当前位置继续往后读取。
f.readline() 一次读取一行数据,在readline()结尾,每次读取出来的数据结尾都会有一个 ,所以,可根据需要用strip()方法去掉 或者空格。
f.readlines() 将每行形成一个原色,放到一个列表中。文件一次性读完,不推荐使用。 4.循环读取:
f = open("文件名",mode = "r",encoding = "utf-8")
for line in f:
print(line.strip())
三、写模式(w,wb)
写的时候如果没有文件,则会创建一个文件;如果存在,则会把原来内容清空,再写入新内容。
1.w模式:
f = open("文件名",mode = "w",encoding = "utf-8")
f.write("写的内容")
f.flush() #写完之后需要刷新
f.close()
2.wb模式:
wb模式下,不用指定打开文件的编码,但在写文件时必须将字符串转化成utf-8的bytes数据。
f = open("文件名",mode = "wb")
f.write("写的内容".encode("utf-8"))
f.flush() #写完之后需要刷新
f.close()
四、追加(a,ab)
追加模式,写入的内容会追加在文件的结尾。
f = open("文件名",mode = "a",encoding = "utf-8")
f.write("写的内容")
f.flush() #写完之后需要刷新
f.close()
五、读写模式(r+,r+b)
对于读写模式,必须时先读。因为默认光标是在开头,准备读取的,读完之后才进行写入(写在了结尾)。若先写的话,写入的内容会覆盖掉原位置的内容,然后再从当前位置往后读取。
f = open("文件名",mode = "r+",encoding = "utf-8")
content = f.read()
f.write("写入的内容")
print(content)
f.flush()
f.close()
六、写读模式(w+,w+b)
先将所有的内容清空,然后写入,最后读取。但是读取的内容是空的。
在w+模式下,先读是读取不到数据的,再写也是将原来的内容先清空,然后写入。
f = open("文件名",mode = "w+",encoding = "utf-8")
f.write("写入的内容")
content = f.read()
print(content)
f.flush()
f.close()
七、追加读(a+)
a+模式下,不论先读还是后读,都是读取不到数据的。
f = open("文件名",mode = "a+",encoding = "utf-8")
f.write("写入的内容")
content = f.read()
print(content)
f.flush()
f.close()
八、其他相关操作
1.seek(n)光标移动到n位置,移动单位是byte,一个中文字符为3个字节。
移动到开头:seek(0)
移动到结尾:seek(0,2),seek的第二个参数表示从哪个位置进行偏移,默认是0,表示开头;1表示当前位置;2表示结尾。
2.tell(),获取当前光标所在位置。
print(f.tell()) #打印光标当前位置
九、文件修改
首先将文件中的内容读取到内存中,将信息修改完毕,然后将源文件删除,将新文件的名字改成老文件的名字。
注意:在读取文件时最好一行一行的读取。
注意:需要调用os模块
import os
with open("小娃娃", mode="r", encoding="utf-8") as f1, #太长时用""连接换行,直接敲回车即可
open("小娃娃_new", mode="w", encoding="UTF-8") as f2: #用with时就不需要关闭句柄了。
for line in f1:
new_line = line.replace("⼤白梨", "冰糖葫芦")
f2.write(new_line)
os.remove("小娃娃") # 删除源⽂文件
os.rename("小娃娃_new", "小娃娃") # 重命名新⽂文件