文件读写基础
简单的读文件:
1 # r 表示只能读 2 #打开文件,得到文件光标对象,文件不存在则报错 3 f=open("ww.txt","r",encoding="utf-8") 4 5 #读取文件内容 6 res=f.read() 7 8 #关闭文件 9 f.close() 10 11 print(res)
读文件补充:
1 # r 表示只能读 2 #打开文件,得到文件光标对象,文件不存在则报错 3 f=open("ww.txt","r",encoding="utf-8") 4 5 #读取文件内容,一次性全部读取 6 #rengs=f.read() 7 8 #读一行 9 #res=f.readline() 10 11 #将文件内容变成一个数组,每行一个元素,一次性全部读取 12 #res=f.readlines() 13 14 #print(res) 15 16 #每行循环打印,一次性全部读取 17 #for linex in f.readlines(): 18 # print(linex) 19 20 #每行循环打印,一次性读一行,效率高,推荐 21 for linex in f: 22 print(linex) 23 24 #查看文件指针位置 25 #汉字长度为3,换行符长度为2,字母长度为1,与文件编码相关 26 print(f.tell()) 27 #指针回退,0表示文件首部 28 f.seek(0) 29 30 #打印文件编码 31 print(f.encoding) 32 33 #打印文件名 34 print(f.name) 35 36 #关闭文件 37 f.close()
简单的写文件:
1 # w 表示只能写 2 #打开文件,得到文件光标对象,如果文件不存在则新建,如果存在则覆盖 3 f=open("ww.txt","w",encoding="utf-8") 4 5 #写文件,返回写入的字数,中文也是1,输出结果为:24 6 res=f.write("dongxiao\ndongdadong\n东小东东") 7 8 #f.flush() #强制刷新,写文件时一般有缓冲区,缓冲区满才会写入 9 #print(f.truncate(2)) #文件截取并更新原文件,从头开始截取,长度与文件编码相关 10 11 #关闭文件 12 f.close() 13 print(res) #输出:24
简单的追加
在文件内容尾部添加数据
1 # a 表示追加,只能写 2 #打开文件,得到文件光标对象,如果文件不存在则新建 3 f=open("ww2.txt","a",encoding="utf-8") 4 5 #写文件,返回写入的字数,中文也是1,输出结果为:7 6 res=f.write("\n追加的东小东") 7 8 #关闭文件 9 f.close() 10 11 print(res) #输出:7
二进制数据
设计图片或者视频数据时可以使用
二进制文件读:
# rb 表示二进制只读 #打开文件,不存在时报错 f=open("ww.txt","rb") res=f.read() print(res) #关闭文件 f.close()
二进制文件写:
# wb 表示二进制只写 #打开文件,不存在时创建 f=open("ww.txt","wb") #必须经过编码成二进制才能进行写 res=f.write("东小东dong".encode("utf-8")) print(res) #输出:13 #关闭文件 f.close()
文件内容更改:
实现一个文件的内容复制到另一个文件,并在文件复制的路上,对文件数据的部分修改
#打开两个文件,分别为写和读
fr=open("ww.txt","r",encoding="utf-8")
ft=open("ww1.txt","w",encoding="utf-8")
#逐行取内容
for lienx in fr:
print(lienx)
#寻找dong是否在字符串中
if "dong" in lienx:
#替换
lienx=lienx.replace("dong","dongxiaodong") ft.write(lienx) #关闭文件 fr.close() ft.close()
其他方法补充
读写方式操作文件:
1 # r+ 表示读写 2 3 #打开文件,不存在是报错 4 f=open("ww.txt","r+",encoding="utf-8") 5 6 print(f.tell()) 7 #写 8 res=f.write("dongxiao\ndongdadong\n东小东东") 9 print(res) 10 11 f.seek(0) #移动文件指针 12 13 res=f.read() 14 print(res) 15 16 17 #关闭文件 18 f.close()
写读方式操作文件:
# w+ 表示写读 #打开文件,不存在时创建 f=open("ww8.txt","w+",encoding="utf-8") #以覆盖方式进行写文件 res=f.write("dongxiao\ndongdadong\n东小东东") print(res) #此时光标在结尾,必须移动光标 f.seek(0) res=f.readline() print(res) #关闭文件 f.close()
追加写读方式操作文件:
1 # a+ 表示追加写读 2 3 #打开文件,不存在时创建 4 f=open("ww10.txt","a+",encoding="utf-8") 5 6 #以追加方式进行写文件 7 res=f.write("dongxiao\ndongdadong\n东小东东") 8 print(res) 9 10 #此时光标在结尾,必须移动光标 11 f.seek(0) 12 13 res=f.read() 14 print(res) 15 16 17 #关闭文件 18 f.close()
with open……as… 文件操作可以避免忘记手动关闭文件,利用缩进特性实现,下面是如上相同功能实现。
#打开两个文件,分别为写和读 with open("ww.txt","r",encoding="utf-8") as fr,open("ww1.txt","w",encoding="utf-8") as ft: # 逐行取内容 for lienx in fr: print(lienx) # 寻找dong是否在字符串中 if "dong" in lienx: # 替换 lienx = lienx.replace("dong", "dongxiaodong11") ft.write(lienx)
获取文件目录:
import os print(os.path.abspath(__file__))#得到程序的绝对路径 print(os.path.dirname(os.path.abspath(__file__)))#得到程序的绝对路径目录名 print(__file__) #返回程序的相对路径