Python 全栈开发 文件处理

一、基本流程

  • 打开文件得到文件句柄
  • 将文件句柄赋值给一个变量
  • 通过文件句柄对文件进行操作
  • 关闭文件

二、基本操作

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是按字节的方式

猜你喜欢

转载自www.cnblogs.com/wallacewang/p/8971252.html