一.文件操作open()文件句柄
open()打开一个文件,获取的是文件句柄
1 f = open('hui',mode='r',encoding='utf-8')
2 # 读取文件中的内容
3 #f(文件名) 'hui'文件名 mode=模式 encoding='编码格式'
4 # read(n) 读取n个字符
5 content = f.read(3)
6 print(content)
7 f.close()
read()
readine()
readines()
write
for line in f : 遍历文件中的内容
路径的问题:.
1.绝对路径
从磁盘根目录寻找
2.相对路径
从当前程序运行的文件夹内寻找
1 # line= f.readline()#读取一行
2 # print(line.strip())#strip()去掉空白.空格
3 # line = f.readline()#在读取一行
4 # print(line)
5
6 # lst = f.readlines()#一次性全都读取出来,返回的是列表
7 # print(lst)
8
9 # 路径的问题
10 # 两种:
11 # 1.绝对路径(当文件路径是固定的时候)
12 # 从磁盘根目录找文件.Windows下用的就是c,d,e,f linux: userinxxxx
13 # 2相对路径(用的多)
14 # 相对路径对于当前程序所在的文件夹
15 # ../表示上一层文件夹
16
17
18 #
转义字符.有固定的含义,推荐用r \
19 # f = open(r'文件路径',mode='r',encoding='utf-8')
20
21 # f = open('hui',mode='r',encoding='utf-8')
22 # while 1:
23 # line = f.readline()
24 # print(line)
25
26 # *********************
27 # 文件句柄是一个可迭代对象
28 f = open('hui',mode='r',encoding='utf-8')
29 for i in f:#读取文件中的内容,一行一行的读取,每次读取的内容交给前面的变量
30 print(i.strip())
二.文件操作的相关模式mode
r:只读
w:只写,先清空里面的内容,然后再写入
a:追加
1 # w 先清空在写
2 # f = open('new_file',mode='w',encoding='utf-8')#可以帮我们创建文件
3 # f.write('
')
4 # f.write('太白')
5 # f.write('很白')
6 # f.write('特别白')
7 # f.close()
8
9 # a 添加
10 # f = open('taihei',mode='r',encoding='utf-8')
11 # f.write('太黑')
12 # f.write('很黑
')
13 # f.write('特别黑
')
14 # print(f.read())
15 # f.close()
16
17 # 文本文件的复制
18 # f1 = open('文件路径',mode='r',encoding='utf-8')
19 # f2 = open('新文件路径',mode='w',encoding='utf-8')
20 # for i in f1:
21 # f2.write(i)
22 # f1.close()
23 # f2.close()
r+:先读取内容后写,无论你读取多少内容,再次写入的时候都是在末尾
w+:清空然后再操作
a+:不论光标在何处写入的时候都是在末尾
1 #r+
2 # f = open('文件名',mode='r+',encoding='utf-8')
3 # content = f.read()
4 # f.write('123')
5 # print(content)
6
7 #w+
8 # f = open('文件名',mode='w+',encoding='utf-8')#先清空然后再操作
9 # f.write('123456')
10 # content = f.read()#写入东西之后,光标在末尾,读取不到内容的
11 # print(content)
12 # f.close()
13
14 #a+
15 f = open('文件名',mode='a+',encoding='utf-8')
16 f.write('6666666666')
17 content = f.read()
18 print(content)
19 f.close()
非文本文件b-bytes 读取和写入的是字节,用来操作非文本文件(图片,音频,视频)
rb
wb
ab
1 # 从bytes角度来复制的,适用于所有文件
2 # f1 = open('图片路径',mode='rb')
3 # f2 = open('复制到的路径',mode='wb')
4 # for i in f1:#分批量的读取内容
5 # f2.write(i)#出来的结果可以使用read或者write.根据mode来看
6 # f1.close()#关闭文件
7 # f2.close()
r+b
w+b
a+b
+扩展
三.相关操作
1.seek()移动光标(重点)
seek(0)开头
seek(0,2)移动到末尾
2.tell()获取光标所在的位置
3.truncate()截断文件
1 # 光标
2 # f = open('文件名',mode='r',encoding='utf-8')
3 # info = f.read(3)
4 # print(info)
5 # f.seek(0)#移动光标
6 # info = f.read(3)
7 # print(info)
8
9 # seek(参数1,参数2)
10 # 参数1表示的是偏移量,移动多少个单位
11 # 参数2表示从什么位置进行偏移
12 # 0:开头
13 # 1:当前位置
14 # 2:末尾
15
16 # 把光标移动到文件的开头:seek(0)
17 # 把光标移动到末尾:seek(0,2)
18 # print(f.read(2))#读取2个字符
19 # f.seek(0)#光标回到开头
20 # print(f.read(2))#读取2个字符
21
22 # tell() #程序返回当前光标的位置
23 # info = f.read(3)
24 # print(info)
25 # print(f.tell()) #获取光标位置
26
27 # truncate 截断文件,慎用
28
29 #尽量不要瞎测试,w,w+
30 # f = open('文件名',mode='r+',encoding='utf-8')
31 # f.seek(5) #光标移动到5
32 # f.truncate()#默认从开头截取到光标位置
33 # f.truncate(3)#从头截取到3
34 # f.close()
四.文件修改
with open(xxx) as 句柄,
open(xxxx) as xxx
不用手动关闭文件句柄
文件修改的步骤
1.从源文件中读取数据
2.写入到副本文件中
3.删除源文件
4.把副本重命名成源文件
import os
os.remove()
os.rename()
1 # import os#导入系统模块
2 # import time#导入时间模块
3 # # 优点: 不用关闭句柄,自动关闭连接
4 # with open('文件名',mode='r',encoding='utf-8') as f1,
5 # open('文件名_副本',mode='w',encoding='utf-8') as f2:
6 # for line in f1:
7 # line = line.replace('6','8')
8 # f2.write(line)
9 # time.sleep(5)
10 # os.remove('文件名')#删除源文件
11 # time.sleep(5)
12 # os.rename('