文章目录
1.文件打开形式
-
r只读
-
w只写
-
r+,可读可写。当文件存在时会报错
-
w+,可读可写。当文件不存在时会新建
-
a ,追加文件,不可读
-
a+,追加文件,可读可写
-
rb 以二进制读模式打开。只可读
-
rb+ 以二进制写读写模式打开。可读可写,当文件不存在时报错
-
wb 以位进制写模式打开。只可写
-
wb+ 以二进制读写模式打开。可读可写。当文件不存在时新建
-
ab 以二进制追加模式打开。追加文件,不可读
-
ab+ 以二进制读写模式打开。追加文件。可读可写
2.文件常见操作
open函数打开文件
注意,打开文件时要带路径
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径,默认当前路径
f=open("./测试.txt",'w+')#以写的形式创建文件,文件不存在时新建
open函数返回一个文件描述符,默认打开方式是读取。
注意:open函数打开中文文件
注意:如果要读取中文文件,需要在open函数后添加encoding='utf-8'
f=open("./测试.txt",‘r’,encoding=‘utf-8’)
close函数关闭文件
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径
f=open("./测试.txt",'w+')
#关闭文件
f.close()
read函数读取文件内容
.read(size=-1),默认size=-1时读取文件的所有内容,并作为字符串返回。
如果size不为-1,则读取size个字符数据
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径
f=open("./测试.txt",'r',encoding='utf-8')
str=f.read()
print(str)
#关闭文件
f.close()
tell函数,返回文件指针当前指向
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径
f=open("./测试.txt",'r',encoding='utf-8')
str=f.read(8)#读取8个字
print(str)
print(f.tell())
#关闭文件
f.close()
seek(offset,from)函数,更改文件指针指向
from=0代表从起始位置开始计算
from=1代表从当前文件指针位置开始计算。
from=2代表从文件末尾
偏移offset个字节
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径
f=open("./测试.txt",'r',encoding='utf-8')
str1=f.read(8)
print(str1)
print(f.tell())
print(f.seek(5,0))
#关闭文件
f.close()
writelines/write函数向文件内写入数据
writelines(seq)向文件中写入字符串序列
writ(str)向文件中写入字符串str
#-*-coding:GBK -*-
# -*- coding: UTF-8 -*-
#open函数打开文件带路径
f=open("./测试.txt",'w+',encoding='utf-8')
f.write("喜欢你软起来的样子")
f.close()#刷新文件
f=open("./测试.txt",'r',encoding='utf-8')
str=f.read()
print(str)
#关闭文件
f.close()
3.文件任务(文件拆分)
eg:
A:这个问题谁来解决?
B:我来!
===================
A:新年快乐
B:谢谢,同乐
===================
A:C++是世界上最好的语言
B:胡说,明明是PHP
将上述文件拆分为3个文件,A的放到一个3个文件中,B的放到3个文件中
def Save(A,B,cout):
#文件保存
Name_A="A"+str(cout)+".txt"
Name_B="B"+str(cout)+".txt"
Af=open(Name_A,'w')
Bf=open(Name_B,'w')
Af.writelines(A)
Bf.writelines(B)
#写入后关闭
Af.close()
Bf.close()
f=open("./read.txt",'r',encoding='UTF-8')
A=[]
B=[]
cout=1#计数器
for each_line in f:
if each_line[:6]!="======":#判断前6个字是不是===
#字符串分割
(role,line_spoken)=each_line.split(":",2)#字符串分割
if role=="A":
A.append(line_spoken)
elif role=="B":
B.append(line_spoken)
else:
Save(A,B,cout)
#清空A B列表
A=[]
B=[]
cout+=1
#将剩下的内容保存起来
Save(A,B,cout)
f.close()
运行结果