1文件操作函数 open
1. 绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找一个路径
2. 相对路径(用的多). 相对于当前程序所在的文件夹 ../上一层文件夹
r 读
f=open("小护士我爱你.txt",mode='r',encoding="utf-8") s=f.read() print(s) f.close()
通过在相同文件下创建的一个文本形式的内容,利用文本操作open进行查找
open"文件名",mode"模式"encoding'字符集'(utf-8)
f.close #没有这段话,你在下面这个程序删除这个会报错
f=open("小护士我爱你",mode='r',encoding="utf-8") for line in f: print(line.strip()) f.close()
#如果文件太大会严重影响运行内存,所以提到for
for line in f 是一个可迭代的对象 print(line.strip()) # 一行一行的处理数据
2.w 写 #带w 的 ,只要你操作完了,就会清空源文件
如果文件不存在,就会新建一个新文件
1 f=open("一次",mode="w",encoding="utf-8") 2 f.write("我爱你 ") 3 f.write("一次就好") 4 f.flush() 5 f.close()
# 自己手动换行
f.flush 刷新
3.a 追加模式
1 f=open("一次",mode="a",encoding="utf-8") 2 f.write("我爱你 ") 3 f.write("一次就好") 4 f.flush() 5 f.close()
在原有基础上进追加 可重复
4.b模式 非文本文件
rb,wb,ab, 都是bytes 如果处理读取的是非文本文件,mode 有b ,encoding 不写
1 f = open("c:/pdd.jpg", mode="rb") # 这里不能写encoding 2 e = open("e:/pdd.jpg", mode="wb") 3 for line in f: # 从c盘读取 line你是不知道读取了多少数据的 4 e.write(line) # 写入到e盘 5 f.close() 6 e.flush() 7 e.close()
5. 带加号的
r+
读写模式 先读后写
1 f=open("一次",mode="r+",encoding='utf-8') 2 s=f.read(3) 3 print(s) 4 f.write("怒要了 ") 5 f.write("怒吃了") 6 print(f) 7 f.flush() 8 f.close()
不论你读了多少内容,光标在哪里,写入的时候都是在结尾写入,除非上来就写入,这是写入实在开头
w+
写读模式,先写后读,
1 很少用. 因为会清空文件中的内容 2 f = open("阿西吧", mode="w+", encoding="utf-8") 3 f.write("张云雷也要退出德云社") # 写完之后光标在最后. 读取是没有内容的 4 f.seek(0) # 移动光标, 移动到开头 5 s = f.read() 6 print("读取的内容是",s) 7 f.flush() 8 f.close()
a+ 模式
1 f=open("一次",mode="a+",encoding="utf-8") 2 f.write("这个是最后一次") 3 f.seek(0) 4 s=f.read() 5 print(s) 6 f.flush() 7 f.close()
s=f.seek (0) #这个是将光标移到0位置
光标
f.seek(3) #3byte=>中文 都是根据光标位置查找到 f.seek(0) 把光标移动到0 seek(0,2) 末尾 seek(1)当前位置 seek(偏移量,位置)
1 f=open("一次",mode="r",encoding="utf-8") 2 f.seek(6) 3 for line in f: 4 print(line.strip()) 5 6 f.close()
正常输出的是我爱你通过移动光标到第二个汉字
print f.tell() #输出光标位置
特殊:
truncate() #从文件开头截断到光标位置
truncate(12) 这个12也是type 如果有参数,从头街道参数位置
1 f=open("一次",mode="w",encoding="utf-8") 2 f.write("我是小狗网袜尴尬") 3 print(f.tell()) 4 f.truncate(21) 5 f.close()
在写入中 通过截取到第21个字节到第7个字而写入的
#####
修改文件
1 import os 2 with open("一次",mode="r",encoding="utf-8") as f1 , 3 open("一次_",mode="w",encoding="utf-8") as f2: 4 for line in f1: 5 line=line.replace("小狗","张庆") 6 f2.write(line) 7 8 os.remove("一次") 9 os.rename("一次_","一次")
不会通过源文件进行写入,因为在w 的时候全部文件都被清空 只能用副本代替