一,文件操作的基本用法
1,open表示打开一个文件
f变量,操控hehe.txt文件句柄
f = open('hehe.txt',mode = 'r',encoding = 'utf-8')
#读取文件中的内容
#read(n)读取n个字符
conten = f.read(3) #读取三个字符
content = f.read() #一次性全部读出来
line = f.readline() #读取一行数据
print(line.strip()) #strip()去掉空白,空格
lst = f.readlines() #一次性全部读取出来,返回的是列表
print(lst)
2.路径问题
两种:
a. 绝对路径(当文件路径是固定的时候)
从磁盘根目录下去找。Windows下用的是c,d,e,f linux: /user/bin/xxx
b.相对路径()
相对路径相当于当前程序所在的文件夹
../ 表示上一层文件夹
3. 注意事项
1) 等转义字符。有固定的含义的,出现在路径中就会造成麻烦,可多加.。
推荐使用r
f = open(r'E:哈 hrhr.txt', mode = 'r',encoding = 'utf-8') #路径前面加上r,意为静止路径中的转义
print(f.read())
2) f = open("hehe", mode="r", encoding="utf-8")
#正常情况下不能用
f.read()
f.readlines() #直接用容易造成内存溢出
3)必须要掌握的
恩建句柄是一个可迭代对象
f = open('hehe'.mode = 'r',encoding = 'utf-8')
for line in f:#读取文件中的内容。一行一行的读取,每次读取的内容交给变量 line
print(line.strip())
4) r:只读
w:只写,注意open打开时会清空文件,文件不存在时会创建文件
a:append 在文件尾部追加内容,文件不存在是同样可以创建文件
5)with编写,就可以不用使用f.close
with open('log',mode='r+',encoding= 'utf-8') as obj:
二.文件操作 w a
1、 mode="w" # 假如文件不存在时,w可以帮我们创建文件
f = open("taibai", mode="w", encoding="utf-8")
f.write("太白 ")
f.write("很白 ")
f.write("特别白 ")
f.close()
2、f = open("taihei", mode="a", encoding="utf-8")
f.write("太黑了 ")
f.write("很黑 ")
f.write("特别黑 ")
f.close()
3、文本文件的赋值
f1 = open(r"c:日记本.txt", mode="r", encoding="utf-8")
f2 = open(r"d日记本.txt", mode="w", encoding="utf-8")
for line in f1: # 从f1中读取数据
f2.write(line) # 写入到 f2 中
f1.close()
f2.close()
三.文件操作之b
b- bytes 读取和写入的是字节,用来操作非文本文件(图片 音频 视频)
rb wb ab
# 需要掌握的:
# 把胡一菲.jpg 从c盘复制到d盘,单纯的的从bytes 角度来复制的。适用于所有的文件
f1 = open(r"c:胡一菲.jpg", mode="rb")
f2 = open(r"d:胡二菲,jpg", mode="wb")
for line in f1: # 分批量的读取内容
f2.write(line) #open() 出来的结果可以使用read或者write。
f1.close()
f2.close()
四.文件操作 +
r+:读写 w+:写读 a+:追加写读 r+b, w+b,a+b
1.r+
# 正常点的,可用的-------先读取内容,后光标跳到最后再写
f = open("person", mode="r+", encoding="utf-8")
content = f.read()
f.write("黄蓉")
# 坑 : 不论你读取多少内容。再次写入的时候都是在末尾(手动调光标可选定写入位置)
f = open("person", mode="r+", encoding="utf-8")
info = f.read(3)
f.write("辣眼睛")
print(info)
2、w+
f = open("person", mode="w+", encoding = "utf-8") # 先清空然后再操作
f.write("你好,我叫巫妖王")
content = f.read() # 写入东西后,光标在末尾,读取不到内容
print(content)
f.close()
3、a+ , #不论光标在何处,写入的时候都是在末尾
f = open("person", mode="a+",encoding="utf-8")
f.write("我叫李嘉诚") # 默认写在末尾
print(content)
综上: r+ 、w+ 、a+ 都是后坑的地方,切记少用,注意神坑
五、光标
1、seek() 小试
# 文本信息: 一起小试牛刀
f.seek(3) # 以字节为单位----移动三个字节
f.read(3) # 以字符为单位,读取三个字符
结果: 起小试牛刀
2、seek() 的应用
seek(参数1, 参数2)
参数1:表示是偏移量,移动多少个字节单位
参数2: 表示从什么位置进行偏移(0:开头 1:当前位置 2:末尾)
# 把光标移动到文件开头:seek(0) #参数2 不写默认为0
# 把光标移动到末尾: seek(0,2)
print(f.read(2)) # 读取两个字符
f.seek(0) # 回到开头
print(f.read(2)) # 读取两个字符
3、tell() # 返回当前光标位置
info = f.read(3)
print(info)
print(f.tell()) # 获取光标位置
4、truncate() 截断文件。慎用