Python基础之文件操作
一、文件操作
1.1、r模式
open参数:第一个参数为文件路径,依次为文件操作模式,和指定编码打开文件。
Mac版本可省略后俩个参数
f = open("123",mode="r",encoding="utf-8") print(f.read()) f.close() # Mac版本可省略后两个参数 f = open("123") print(f.read()) f.close()
1.2、rb模式
rb模式读出来的是字节byte,但是open参数不能指定编码。
rb作用在读取非文本文件时,例音频、视频、图像等就需要使用rb模式读取数据,因为这种格式是无法直接显示出来。
f = open("123",mode="rb") print(f.read()) f.close()
# 关于文件路径分为绝对路径和相对路径 # 绝对路径:依次从根目录下(或磁盘)依次查找文件 # 相对路径:在相同文件下,可以直接写文件名 # 实际环境中请使用绝对路径 # 例:windows关于路径报错解决 open('C:\Users\Meet') #这样程序是不识别的 # 解决方法一: open('C:\\Users\\Meet') #这样就成功的将\进行转义 两个\\代表一个\ # 解决方法二: open(r'C:\Users\Meet') #这样相比上边的还要省事,在字符串的前面加个小r也是转义的意思
二2.1、read()是将文件内所有
f = open("123",mode="r",encoding="utf-8") print(f.read() f.close() # read()还可以指定字符来读取 f = open("123",mode="r",encoding="utf-8") print(f.read(5)) f.close() # 或使用rb模式来读取字符的字节 f = open("123",mode="rb") print(f.read(5)) f.close()
2.2、read()当读取大文件时,文件内容会全部显示出来,这样以来将会导致内存崩溃。
所以使用readline()一行一行的读取文件内容,但读取出来的内容后都会有\n(换行符)
# readlines()是将形成一个元素,放到列表中,将所有到内容都读出来,如果文件非常大内存会崩溃 f = open("123",mode="r",encoding="utf-8") print(f.readlines()) f.close() # 如果文件非常大,可使用for循环来读取 f = open("123",mode="r",encoding="utf-8") for x in f: print(x)
三、写模式
3.1、w覆盖写,当在写文件的时候先打开文件清空内容,然后在进行操作。
# 当在写完文件时可以尝试刷新flush() # 当文件不存在时,使用w模式会自动创建一个文件 f = open("123",mode="w",encoding="utf-8") f.write("matrt.pei") f.flush() f.close()
3.2、wb模式
不可以指定打开文件编辑,但写文件的时候必须将字符串转换成utf-8的byte类型
f = open("123",mode="wb") x = "matt".encode("utf-8") f.write(x) f.flush() f.close(,
四、追加
a a+ ab都是在文件末尾追加写入,无论光标在什么位置,都会追加到文件末尾
在a模式下,如果文件不存在就会创建一个新文件
f = open("123",mode="a",encoding="utf-8") f.write("It's OK")
五、读写模式
在读写模式下,必须是先读后写,因为光标默认在开头位置。当读完后在进行写入(使用频率最高)
# r+模式 # 在r+模式下,不管读取多少内容,在写入都会在文件末尾进行操作 f = open("123",mode="r+",encoding="utf-8") x = f.read() f.write("111111") f.flush() f.close() print(x)
六、写读模式
写读模式下,是先将文件内容清空,然后写入最后在读取
# w+模式 f = open("123",mode="w+",encoding="utf-8") f.write("Matt.Pei") x = f.read() f.flush() f.close() print(x)
在a+追加读模式下,无论是先读还是后读,都读不到数据的
f = open("123",mode="a+",encoding="utf-8") f.write("aaaaaaaaa") x = f.read() f.flush() f.close() print(x)
七、其他操作
7.1、seek()是将光标移动到指定n位置,移动单位为字节byte,如果是utf-8到中文需要为3到倍数
通常使用都是移动到文件开头或末尾
移动到开头:seek(0,0) 可简写为seek(0)
移动到末尾:seek(0,2) 第二个参数表示为从哪个位置进行偏移,默认为0 表示开头,1表示为当前位置,2表示文件末尾
# 当把光标移动到开头,输出结果 f = open("123", mode="r+", encoding="utf-8") f.seek(0) x = f.read() print(x) # 如果把光标先移动到开头,在移动到末尾,则没有内容 f.seek(0) f.seek(0, 2) y = f.read() print(y) f = open("123",mode="r+",encoding="utf-8") f.write("666666") f.flush() print(f.tell()) f.close()
7.2、tell()是告诉光标所在到位置
f = open("123", mode="r+", encoding="utf-8") f.seek(0) x = f.read() print(f.tell())
7.3、文件修改
是先将文件中到内容读取到内存中,将信息修改完成后,然后在将原文件删除,后将新文件名改成旧文件名
import os with open("123", mode="r", encoding="utf-8")as f,\ open("123.bak",mode="w",encoding="utf-8") as l: x = f.read() y = x.replace("666666","matt") l.write(y) os.remove("123") os.rename("123.bak","123")