一.文件操作
1.初识文件操作
使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作,本剧打开方式的不同,能够执行的操作也会有所差异
常用的操作主要有: r w a r+
⑴只读操作 r(read) enconding ==> 编码格式
例如:
首先需要创建一个utf-8格式的文件,并填写内容
f = open("文件名字",mode = "r",encoding = "utf - 8")
s = f.read() 读取路径内容
f.close() 关闭句柄
print(s) 显示文件里面的内容 出现的效果是==>创建文件里面的内容
路径主要有两种:
1.相对路径 相对于当前程序所在的文件夹 (../ :是返回上一层文件夹) 需要向上退回几层的时候就需要写几个
2.绝对路径 ①从磁盘根目录寻找 ②互联网上的一个绝对路径
(2)只写操作 w(write)
例如: (当该文件不存在的时候,会自动添加一个文件并有添加的内容 如果该文件存在的时候,添加内容的时候,会把之前的内容全部清除,并把新的内容添加进去)
f = open("文件名字",mode = "w", encoding = "utf-8")
f.write("需要添加的内容")
f.flush() 刷新操作
f.close()
注意:w模式下,写入之前会清除原来的内容
(3)追加操作 a(append)
例如:
f = open("文件名",mode = "a",encoding = "utf - 8")
f.write("某某某")
f.flush()
f.close() 出现的效果===>会在文件原来内容的基础上,在末尾添加内容
(4)只读字节操作 rb b=bytes (字节) 读取到的内容直接就是字节
例如:
f = open("文件名",mode = "rb")
bs = f.read()
print(bs) 出现的效果====>bytes,此时就需要decode解码 在文件里面会看到解码后的文字
print(bs.decode("utf - 8"))
注意:带b的处理的都是非文本的东西
(5)只写字节操作 wb
例如:
f = open("文件名",mode = "wb")
f.write("你好啊".encode("utf - 8"))
f.close() 出现的效果===>打印你好啊
(6)读写模式 r+ 读写模式必须是先读后写
例如:
f = open("文件名",mode = "r+",encoding = "utf - 8")
s = f.read() r+模式,默认情况下光标在文件的开头,必须先读后写
f.write("添加的内容")
f.flush()
f.close
print(s) 出现的效果===>文件原来的内容基础上,末尾添加了新的内容
(7)写读模式 w+ (先将所有内容清空,然后写入,最后读取,但是读取的内容时空的)
f = open("文件名",mode = "w+",encoding= "utf - 8")
f.write("哈哈")
f.seek(0) seek(移动光标)
s = f.read() w操作会清空原来的内容
print(s)
f.flush()
f.close()
2.其他相关操作
(1)seek(n) 光标移动到n的位置,移动的单位是字节 所以在utf - 8 的中文部分 就是三个字节 一个字
移动到开头 seek(0)
移动到结尾 seek(0,2) 第二个参数表示的是从哪个位置进行偏移,默认的是0,表示开头,1表示的是当前位置,2表示的是结尾
例如:
f = open("文件名",mode = "r+",encoding = "utf-8")
f.seek(0) 光标移动到开头
s = f.read() 读取的内容,此时光标移动到结尾
print(s)
f.seek(0) 再次将光标位置移动到开头
f.seek(0,2) 将光标位置移动到末尾
s1 = f.read() 读取的内容 什么都没有
print(s1)
(2)内容修改
创建新文件,把修改后的内容写入到新文件,删除老文件,重命名新文件
例如:
import os 使用with open 的时候不需要关闭文件句柄
with open("吃的",mode = "r",encoding = "utf - 8") as f1 , open("吃的_副本",mode = "r",enconding = "utf -8") as f2
s = f1.read() for line in f1: (方法2)
ss = s.replace("肉","菜") 将源文件里面的肉改成菜 s = line.replace("菜","肉")
f2.write(ss) f2.write(s)
os.remove("吃的") 删除文件
os.rename("吃的_副本","吃的") 重命名文件
(3)line (一行一行的读取数据 但是每次读取出来的数据都会有\n 空行 所以需要使用strip()方法来去掉\n或者空格) lines (将每一行形成一个元素,放到一个列表中,将所有的内容读取出来)
例如:
f = open("文件夹",mode = "r",encoding = "utf - 8")
for line in f: 每次读取一行
print(line)
(4)readable() writeable()
例如:
f = open("文件夹"mode = "r",encoding = "utf - 8")
如何判断这个文件可以进行什么操作
print(f.readable()) 判断文件是否可读
print(f.writeable()) 判断文件是否可写
(5)lines
例如:
l = f.readlines()
print(l)
f.flush() 打印出来的是列表 \n 表示的是制表符 或者是换行
f.close()
去掉换行,或者制表符
for s in l: for s in l:
ss = s.strip() print(s.end = "")
print(ss)
strip的两个功能:①去掉空格 ②去掉换行符,制表符
(6) truncate() 不给参数,从文件头截取到当前位置
如果给了参数,从头截取到你给的这个参数的位置 (给的数是字节)