一:.文件操作的函数
open(文件名(路径),mode="?",encoding="字符集")
文件路径:
1.绝对路径:从磁盘的根目录寻找
f = open("e:/abc/里皮.txt",mode="r",encoding="gbk")
s = f.read()
2.相对路径(用的多),相对于当前程序所在的文件夹 ../代表上一层文件夹
f = open("文件读取操作.py",mode="r",encoding="UTF-8") s = f.read() print(s) f.close()
例:
1.
f = open("呵呵呵",mode="r",encoding="utf-8")
#方案1(有缺陷):
while 1:
s = f.readline().strip() #一次读一行 strip()去掉换行/空格
if s != ""
print("内容是:",s)
f.close()
#方案2:
for line in f: #文件是一个可迭代对象
print(line.strip()) #一行一行的处理数据
f.close()
2.模式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b #(1) 带w的,只要你操作了,就会清空源文件 # 如果文件不存在,会自动创建文件
f = open("呵呵呵", mode="w", encoding="utf-8")
f.write("呀!养狗了没有?")
f.flush()
f.close()
#(2)a模式 #写的时候,换行需要手动控制 \n
f = open("阿西吧",mode="a",emcoding="utf-8")
f.write("思密达?\n")
f.write("思密达?")
f.flush()
f.close()
#(3)b模式 ,rb,wb,ab,bytes 如果处理的是非文本文件 ,mode里如果有b,encoding就不能给了
读:f = open("c:/pdd.jpg",mode="rb") #这里不能写encoding
写:e = open("e:/pdd.jpg",mode="wb")
for line in f: #从c盘读取
e.write(line) #写入到e盘
f.close()
e.flush()
e.close()
#(4) r+ 读写 读的时候,默认光标在最开头 #不论你读取了多少内容,光标在哪,写入的时候都是在结尾写入 #最好用的读写同时存在的模式
f = open("阿西吧",mode="r+",encoding="utf-8")
s = f.read()
f.write("不养了,送人") #在末尾写
f.close()
#(5) w+ 很少用,因为会清空文件内容
f = open("阿西吧",mode="w+",encoding="utf-8")
f.write("张云雷也要退出德云社") #写完之后,光标在最后,读取是没有内容的
f.seek(0) #移动光标
s = f.read()
print("读取的内容是:",s)
f.flush()
f.close()
#(6) a+ 追加
f = open("阿西吧",mode="a+",encoding="utf-8")
f.write("我要加入德云社")
f.seek(0)
s = f.read()
print(s)
f.flush()
f.close()
3.常用的操作
#1.光标(seek)*
#(1)移动到开头 seek(0)
f = open("阿西吧",mode="r",encoding="utf-8")
for line in f:
print(line.strip())
f.seek(0) #移动到开头
for line in f:
print(line.strip())
f.close()
#(2) 移动到结尾 seek(0,2) seek 读取的是byte read读取的是字符
open("阿西吧",mode="r",encoding="utf-8")
f.seek(3) #3个byte => 1个中文
s = f.read(1) #读取一个字符
print(s)
f.close()
seek(偏移量,位置)
seek(0,2) #在末尾的偏移量是0,末尾
#2.tell可以帮我们获取到当前光标在什么位置
pritn(f.tell()) #光标位置
#3.truncate截断文件
f = open("啊同类个统统",mode="w",encoding="utf-8")
f.write("哇哈哈哈压缩概论")
f.seek(9)
print(f.tell())
#从文件开头截断到光标位置
#如果给参数,从头截断到参数位置
f.truncate(12)
f.close()