一. 初识文件操作
使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进⾏各种各样的操作了. 根据打开方式的不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使用的是r(只读)模式
1. r
f=open("水浒传",mode="r",encoding="utf-8") s=f.read() f.close() #关闭句柄 print(s)
需要注意encoding表示编码集. 根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8.
../ 返回上一层目录 f=open("chenwei/chen",mode="r",encoding="utf-8") s=f.read() print(s) f.close()
2.w
写的时候注意. 如果没有文件. 则会创建文件, 如果文件存在. 则将原件中原来的内容删除, 再写入新内容
f=open("三国演义",mode="w",encoding="utf-8") s=f.write("曹操") f.flush() #曹操 f.close()
f=open("三国演义",mode="w",encoding="utf-8") s=f.write("刘备") f.flush() #刘备 f.close()
3.a
在追加模式下. 我们写入的内容会追加在文件的结尾.
在原来的基础上进行追加内容. f=open("三国演义",mode="a",encoding="utf-8") f.write("诸葛亮") f.flush() #刘备诸葛亮 f.close()
4.rb
f=open("明星",mode="rb") s=f.read() print(s.decode("utf-8")) #解码 f.close()
5.wb
f=open("球星",mode="wb") s=f.write("詹姆斯".encode("utf-8")) f.close()
詹姆斯
6.ab
f=open("球星",mode="ab") s=f.write("保罗".encode("utf-8")) f.close()
詹姆斯保罗
7.r+
f=open("老师点名",mode="r+",encoding="utf-8") f.write("小明") s=f.read() f.flush() f.close() print(s) 李四 王五 马六
对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了之后再进⾏写入. 我们以后使用频率最高的模式就是r+
所以:r+模式, 默认情况下光标在文件的开头, 必须先读, 后写
f=open("老师点名",mode="r+",encoding="utf-8") s=f.read() f.write("小明") f.flush() f.close() print(s) 张三 李四 王五 马六小明
总结:
1.在没有任何操作之前进行写. 在开头写
2. 如果读取了一些内容. 再写, 写入的是最后
f=open("名言警句",mode="r+",encoding="utf-8") s=f.read(3) #来而不往非礼也,既来之,则安之 f.flush() f.close() print(s) 来而不
f=open("名言警句",mode="r+",encoding="utf-8") f.write("哈哈") f.flush() f.close() 哈哈不往非礼也,既来之,则安之
f=open("名言警句",mode="r+",encoding="utf-8") s=f.read(3) 来而不往非礼也,既来之,则安之 f.write("哈哈") 来而不往非礼也,既来之,则安之哈哈 f.flush() f.close() print(s) 来而不
不管你前面读了几个. 后面去写都是在末尾
1.在没有任何操作之前进行写. 在开头写
2.如果读取了一些内容. 再写, 写入的是最后
f = open("精品", mode="r+", encoding="utf-8") f.read(3) f.seek(3) # 移动到xx位置 # 移动到开头: f.seek(0) 开头 # 移动到末尾: f.seek(0, 2) 末尾 第二个参数有三个值. 0: 再开头, 1: 在当前, 2: 末尾
f=open("名言警句",mode="r+",encoding="utf-8") f.seek(6) # 移动6个字节. 2个字 s = f.read(3) # 读取3个字 print(s)
不往非 来而不往非礼也,既来之,则安之哈哈 f.seek(0) ss = f.read(3) print(ss) 来而不
f=open("名言警句",mode="r+",encoding="utf-8") s = f.read() f.seek(0) 来而不往非礼也,既来之,则安之 ss= f.read() print(s) print(ss) 来而不往非礼也,既来之,则安之 来而不往非礼也,既来之,则安之
8.w+
f=open("篮球",mode="w+",encoding="utf-8") f.write("科比") f.seek(0) s=f.read() f.flush() f.close()
科比
w 操作.会清空原来的内容. w+是不用的.
9.a+
f=open("篮球",mode="a+",encoding="utf-8") f.write("姚明") f.seek(0) s=f.read() f.flush() f.close() 科比姚明
二.文件内容修改
修改文件以及另一种打开文件的方式
文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字.
import os with open("玩的",mode="r",encoding="utf-8")as f1, open("玩的_副本",mode="w",encoding="utf-8")as f2: s=f1.read() ss=s.replace("球","星") f2.write(ss) os.remove("玩的") os.rename("玩的_副本", "玩的") 台星 羽毛星 篮星 乒乓星 足星 排星 橄榄星
import os with open("玩的",mode="r",encoding="utf-8")as f1, open("玩的_副本",mode="w",encoding="utf-8")as f2: for line in f1: s = line.replace("星", "球") f2.write(s) os.remove("玩的") os.rename("玩的_副本", "玩的") 台球 羽毛球 篮球 乒乓球 足球 排球 橄榄球
如何判断这个文件可以进行什么操作
f = open("球星", mode="r", encoding="UTF-8") print(f.readable()) # 判断文件是否可读 print(f.writable()) # 是否可写入
True
False
f = open("电视", mode="r", encoding="UTF-8") l = f.readlines() # 拿到列表 for s in l: ss = s.strip() # strip() 去掉空格. 还可以去掉换行符, 制表符 print(ss) print(l) f.flush() f.close()
s = " 哈哈哈哈" print(s.strip()) 哈哈哈哈
truncate()
truncate() 不给参数. 从文件头.截取到当前位置
给了参数. 从文件头截取到你给这个参数的位置
f = open("英雄联盟", mode="r+", encoding="utf-8") f.seek(12) 剑圣剑姬剑魔剑豪德玛火男 f.truncate() 剑圣剑姬
f = open("英雄联盟", mode="r+", encoding="utf-8") f.seek(12) 剑圣剑姬剑魔剑豪德玛火男 f.truncate(15) f.flush() f.close() 剑圣剑姬剑
f = open("玩的", mode="r", encoding="utf-8") for line in f: # 每次读取一行. 赋值给前面的line变量 print(line) f.close() 台球 羽毛球 篮球 乒乓球 足球 排球 橄榄球