①②python文件操作及文件增删改查
Python中的文件打开模式
文件打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错 |
w | 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建 |
a | 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建 |
r+ | 在r的基础上增加了可写功能 |
w+ | 在w的基础上增加了可读功能 |
a+ | 在a的基础上增加了可读功能 |
b | 读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb, ab, ab+(POSIX系统,包括Linux都会忽略该字符) |
pycharm新建文本文件zhuxian,内容为一首歌的歌词
f = open("zhuxian2",'w',encoding= "utf-8") #文件句柄 #注意:w是创建模式write,会覆盖原文件;r是只读模式;读不能执行写,写不能执行读 #data = f.read() #data2 =f.read() f.write("其实我很烦恼,\n") f.write("只是你不知道")
f = open("zhuxian2",'a',encoding= "utf-8") #a = append 追加,不能执行读 f.write("\n如果我也不开心") data = f.read() print('-----data',data)
f = open("zhuxian",'r',encoding= "utf-8") for i in range(5): #print(f.readline()) #读5行 print(f.readlines()) #m每一行一个元素组成一个列表 for line in f.readlines(): print(line.strip()) #列表循环
f = open("zhuxian",'r',encoding= "utf-8") #low loop低效循环,不推荐使用该方法 for index,line in enumerate (f.readlines()): if index == 9: print('--------分割线-------') continue print(line.strip())
#高效循环,推荐使用该方法
f = open("zhuxian",'r',encoding= "utf-8") count = 0 for line in f: if count == 9: print('--------分割线-------') count += 1 continue print(line) count += 1
f = open("zhuxian",'r',encoding= "utf-8") print(f.tell()) #读取文件中光标位置 #返回结果:0 #刚开始光标在文首的位置 print(f.readline()) print(f.tell()) #返回结果为24,读取一行后,光标在读取后的位置,也即读取的字符个数之后 f.seek(0) #光标回到文首 print(f.readline()) print(f.encoding) #打印文件编码 print(f.flush() ) #把写文件缓存刷新到硬盘 print(f.fileno()) print(f.name) #打印文件名字 print(f.isatty()) #是否为终端设备 print(f.seekable() )#判断文件类型是否可移动光标 print(f.readable() )#判断文件类型是否可读 print(f.writable()) #判断文件类型是否可写 print(f.buffer) print(f.closed) #判断文件是否关闭了
#缓冲flush的作用,进度条实例如下 import sys,time for i in range(20): sys.stdout.write('#') #stdout标准输出 sys.stdout.flush() time.sleep(0.1)
f = open("zhuxian",'a',encoding= "utf-8") #f.seek(24) f.truncate(100) #truncate 从文首开始截短,多少个字符后截短
f = open("zhuxian",'r+',encoding= "utf-8") #r+,读写模式,前面有读取readlines时写追加在文件末尾, #直接写入则从开头开始覆盖 print(f.readline()) f.write("----------diao---------\n") f.write("----------diao---------\n") f.write("----------diao---------\n") f.write("----------diao---------\n") print(f.tell()) f.seek(10) print(f.tell()) print(f.readline()) f.write("should be at the begining of the second line") f.close()
f = open("zhuxian",'w+',encoding= "utf-8") #w+,写读模式,先创建一个文件,然后写入 f.write("----------diao---------\n") f.write("----------diao---------\n") f.write("----------diao---------\n") f.write("----------diao---------\n") print(f.tell()) f.seek(10) print(f.tell()) print(f.readline()) f.write("should be at the begining of the second line") f.close()
f = open("zhuxian",'rb') #rb,二进制文件只读;3.0里网络传输只能用二进制格式;视频文件 print(f.readline()) print(f.readline()) print(f.readline())''' f = open("zhuxian",'wb') f.write("hello world\n".encode())
#修改文件写入新文件,原文件不变 f = open("zhuxian",'r',encoding= "utf-8") f_new = open("zhuxian.bak",'w',encoding= "utf-8") for line in f: if "这世界多么美好" in line: line = line.replace("这世界多么美好","这世界多么+++++++美好") f_new.write(line) f.close() f_new.close()
with open("zhuxian",'r',encoding= "utf-8") as f: print(f.readline()) #with语法,程序执行完后,会自动close