一、基本流程
- 打开文件得到文件句柄
- 将文件句柄赋值给一个变量
- 通过文件句柄对文件进行操作
- 关闭文件
二、基本操作
1、文件句柄
1 f = open("a.txt",encoding="utf-8") #f为文件句柄,通过文件句柄我们进行操作 2 data = f.read() 3 ''' 4 该操作是在内存中运行:读取硬盘中的文件,即将二进制读取出来 5 所以要提供编码方式,因为存入的时候是以utf-8编码的,所以在 6 读取时要使用utf-8 7 '''
2、文件读写编码问题
在读的时候:指定打开编码,该编码与写入文件的编码需要一样否则会乱码
在写的时候:指定写的编码,不能使用不同的编码,否则打开的时候容易乱码
3、文件的读写模式
只读模式:默认就为只读模式
1 f = open("a.txt","r",encoding="utf-8") 2 data = f.read() 3 f.readable() #判断一个文件是不是可读 4 f.close() #打开文件后必须关闭文件
读取一行和读取多行
读取一行
1 f = open("a.txt","r",encoding="utf-8") 2 data2 = f.readline() 3 print(f.readline(),end="") 4 ''' 5 注意:在同一个文件句柄中,是一行一行读,读取完后 6 光标的在文件最后的。同时在读取的时候会出现换行现 7 象,可以在打印的时候加上end = ""来取消换行 8 ''' 9 f.close() #打开文件后必须关闭文件
读取多行
1 f = open("a.txt","r",encoding="utf-8") 2 data3 = f.readlines() #读取文件的所有行,并且以列表的形式表现出来 3 f.close() #打开文件后必须关闭文件
只写模式:写的参数必须为字符串,不能为其他类型
1 f = open('yesterday2.txt','w',encoding='utf-8') # 只写模式,若文件存在则会覆盖,若文件不存在,则创建一个文件 2 f.write('I love you')
以列表的形式写入多行:
1 f = open("b.txt","w",encoding="utf-8") 2 f.writelines(["aaa\n","bbb\n","ccc\n"]) #以列表的形式写入多行 3 f.close()
追加操作:
1 f = open('yesterday','a',encoding='utf-8') #追加,也可读,不存在则创建,存在则在末尾追加,只能在末追加 2 f.write('I love you') 3 f.close()
打开文件的第二种形式:
1 #常用的打开文件方式,在对文件进行操作的时候要在with内部 2 with open('yesterday','r',encoding='utf-8') as f,\ 3 open('yesterday.txt','r',encoding='utf-8') as f2: #这种方式打开文件会自动关闭,而且可以同时打开多个文件 4 f.read()
文件的b模式:
rb模式:
1 ''' 2 bytes读写优点:处理图片,视频等文件等 3 ''' 4 5 #rb读 6 # f = open("a.txt","rb",encoding="utf-8") b的方式不需要指定编码,以为硬盘存的就是二进制 7 8 #存取过程 字符串------>encode()------->bytes 9 #读取过程 bytes------>decode()------->字符串 10 11 f = open("a.txt","rb") 12 data = f.read() 13 f.close() 14 15 #wb写 16 17 f1 = open("b.txt","wb") #写wb指以bytes写 18 # f.write(b"aaaa\n") #写的时候必须是bytes类型,不能用这种方式,因为没有指定编码方式 19 f.write(bytes("aaaaa",encoding="utf-8")) #指定以什么编码方式,变成bytes类型的 20 f.writelines("aaaaa".encode("utf-8")) #这种方式也可以 21 22 #ab写: 23 24 f2 = open("b.txt","ab") #在写的时候,写到最后一行 25 f.write("aaaaa".encode("utf-8"))
+默式:
1 #只写模式 2 f = open('yesterday','r+',encoding='utf-8') 3 f.read() #若是先读再写,则是在文件内容后面追加,即从光标上写 4 f.write('maibeyby') #是直接写,则是从开头写,把原来内容覆盖,而不是挤出去 5 f.close() 6 7 8 # f = open('yesterday','w+',encoding='utf-8') #写读模式,必须先写入,在把光标移至开始才能读,没什么用 9 # f.write('i love you') 10 # f.seek(0) 11 # print(f.read()) 12 13 # f = open('yesterday','a+',encoding='utf-8') #在追加中增加可读模式 14 # f.seek(0) 15 # print(f.read()) 16 # f.write('\ni love you1')
文件处理其他方法:
1 ''' 2 在Windows中换行为\r\n,而pyhon解析出来的是\n,这是Python里面经过 3 处理了,这样是为了避免不同操作系统的换行不一样而处理的,要想显示其 4 原本的换行符,在打开文件的时候加上newline="" 5 ''' 6 f = open("c.txt","w",encoding="utf-8",newline="") 7 # f.encoding #显示文件打开的编码 8 ''' 9 我们写的数据是存在内存上,不会马上存入硬盘,使用flush()可以马上将它存 10 入硬盘,操作系统会每隔一段时间使用一下flush()。 11 ''' 12 f.flush() #将内存的数据刷到硬盘上 13 fl = open("a.txt","r+",encoding="utf-8") 14 ''' 15 文件光标处理: 16 除了read()以外,read读取的是字符,其他方法的光标是以字节为单位的 17 ''' 18 print(fl.tell() ) #先显示当前光标位置 0 19 print(fl.readline()) #读取一行 20 print(fl.tell()) #显示光标所在的位置, 32 21 fl.seek(0) #可以控制光标的为在0是按字节的方式