一,文件操作的流程
1,打开文件,得到文件句柄并赋值给变量;
2,通过文件句柄对文件进行操作;
3,关闭文件
f=open("file","w")
f.write("123")
f.close()
这种方式是用调用open()和close()函数来实现文件的打开和关闭,但是这样如果程序存在bug,将导致close()语句没有执行,文件未关闭,可能会导致文件中的数据丢失或受损。但如果程序过早的调用了close(),这样在使用文件时会因为他已经关闭而无法使用,将会导致更多的错误。因此我们要用改进的结构:
with open("file","w") as f:
f.write("123")
二,从文件中读取数据
1,用read()读取文件中指定的字节数。若未指定则表示读取所有。
with open("file","r",encoding=("utf-8")) as f:
print(f.read())
表示从文件中读取3个字节
with open("file","r",encoding="utf-8") as f:
print(f.read(3))
2,用readline()读取内容时每次一句一句的读,适用于多内容文件
ith open("file","r",encoding=("utf-8")) as f:
for i in range(5): #表示读取5行
print(f.readline().strip()) #strip()去掉两边空格
3,用readlines()读取内容时,一次性读出所以内容,将每一句当做列表的元素。适用于小文件
with open("file","r",encoding=("utf-8")) as f:
print(f.readlines())
第四条语句 不打印。
with open("file","r",encoding=("utf-8")) as f:
#print(f.readlines())
for index,item in enumerate(f.readlines()):
if index==3:
continue #终止当前循环,跳出该次循环,执行下次循环
print(index,item.strip())
注:readline和readlines不能实现协程,程序一旦运行就不能中断。
4,用for循环实现文件读取
with open("file","r",encoding=("utf-8")) as f:
for i in f:
print(i.strip())
注:它本身是迭代器方法,可以实现协程,运行过程中可以实现中断。
三,写入文件
1,将“草莓”写入文件中。如果文件不存在,open()将会自动调用,如果文件存在,且里面有数据,则会将原数据覆盖。
with open("file","w",encoding="utf-8") as f:
f.write("草莓")
2,将“香蕉”追加到文件后面。
with open("file","a",encoding="utf-8") as f:
f.write("香蕉")
3,r+:先读后写
with open("file","r+",encoding="utf-8") as f:
f.write("梨")
print(f.readline())
注:由于先读后写是在原有文本后添加的,读完后类指针已经在文件最末尾了,因此只能读到文件中以前有的,新写的内容不会被读到。如果文件不存在,会报错
4,w+:先写后读
with open("file","w+",encoding="utf-8") as f:
f.write("梨")
print(f.readline())
注:先写后读会将文件中原有的全部覆盖,如果文件不存在会调用open()创建新文件。由于读写机制,每次读完或写完,文件中类指针总是指向文件末尾,因此先读的话不会读取到任何内容。添加seek(0)会回到初始位置开始读。
with open("file","w+",encoding="utf-8") as f:
f.write("梨")
f.seek(0)
print(f.readline())
四,对文件的操作
1,seek():用于移动文件读取指针到指定位置。
with open("file","r",encoding="utf-8") as f:
print(f.readline().strip())
print(f.read(3))
注:由于在执行第一条语句时将类指针移动到文件的第二句开头,因此在执行第二条语句时将从文件的第二行开头开始读取。
with open("file","r",encoding="utf-8") as f:
print(f.readline().strip())
f.seek(0)
print(f.read(3))
注:seek(0)表示将文件的类指针移动到起始位置。
2,fileno():返回一个整形的文件描述符
with open("file","r",encoding="utf-8") as f:
print(f.fileno())
3,tell():返回文件指针当前的位置
with open("file","r",encoding="utf-8") as f:
print(f.tell())
注:0表示在起始位置。
4,truncate():从指定位置处开始截断字符,有指定大小,则从开始到指定的位置;若没有指定大小,则表示从当前位置至后面的所有字节被删除。
with open("file","r+",encoding="utf-8") as f:
f.truncate(2)