python 在操作文件 I/O 的时候,有两个非常重要的方面:一个是 open() 函数的掌握、另一个是 File 文件对象的相关函数的掌握。相比其他面向对象语言的文件流的用法是比较简便的,并且提供很多的文件打开模式算是比较优秀了。
前往 >>?【阅读原文】
1、全局函数 open()
open()?函数的可选参数还是比较多的,一般在读取文件时只使用文件路径、文件打开模式就可以完成大多数的使用场景。使用 open() 函数打开文件后返回的就是一个 File 文件对象,然后使用 File 对象的内部函数实现对文件的操作,需要注意的是在完成文件对象的操作后必须对文件进行关闭。
open('/usr/load/download/20210320/test.txt',mode='r')
open()?函数的完整的语法格式
1open('/usr/load/download/20210320/test.txt',?mode='r',?buffering=-1,
2encoding=None,?errors=None,?newline=None,?closefd=True,?opener=None)
open() 函数完整语法格式的各个可选参数代表什么样的含义
1file:?必填参数项?--?文件的打开的路径(支持相对路径和绝对路径)
2mode:?可选参数项?--?文件打开模式,默认为只读模式
3常见的?mode?参数值的格式
4#?打开模式
5'b':--?以二进制模式打开
6't':--?以文本模式打开(缺省模式)
7'+':--?以读写模式打开
8'U':--?以通用换行符模式打开
9#?操作模式
10'r':--?以只读模式打开
11'w':--?以只写模式打开
12'a':--?以追加模式打开
13#?组合模式,将打开模式与操作模式进行组合使用,下列为常见组合
14'r+':--?以文本读写模式打开
15'w+':--?以文本读写模式打开
16'a+':--?以文本读写模式打开
17buffering:?可选参数项?--?设置缓冲,缓冲的设置是为了减少?IO?的使用,一般设置0(二进制模式关闭缓冲),1(文本模式一行的缓冲),>1(初始化缓冲的大小)
18encoding:?可选参数项?--?文件编码,一般情况使用?utf-8编码即可
19errors:?可选参数项?--?设置报错级别,为None时不设置,为?strict?时字符编码出现问题会报错,为?ignore?时忽略编码问题
20newline:?可选参数项?--?区分换行符,只对文本模式有效,一般情况下可以取值None,'\n','\r','','\r\n'来自定义换行
21closefd:?可选参数项?--?传入的file参数类型,为True时参数类型表示文件名称,False时为文件描述符
22opener:?可选参数项?--?设置自定义开启器,返回值必须是一个打开的文件描述符。
2、File?文件操作对象
? File -> file_obj.write(string)
1#?使用只写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","w")
3#?定义原始数据
4string?="Python?集中营"
5#?将字符串写入文件
6file_obj.write(string)
7#?关闭文件
8file_obj.close()
?File ->?file_obj.tell()
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3current_data?=?file_obj.tell()
4print"当前数据位置:?",current_data
?File ->?file_obj.read([size])
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5#?读取?5?个字节
6data1?=?file_obj.read(5)
7#?读取整个文件
8data2?=?file_obj.read(-1)
?File ->?file_obj.next()
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5foriinrange(10):
6#?读取下一行
7data_line?=?file_obj.next()
8print"第?%d?行?-?%s"%?(i,?data_line)
9#?关闭文件
10file_obj.close()
?File ->?file_obj.readline([size])
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5#?读取一行的?10?个字节
6data_line1?=?file_obj.readline(10)
7#?读取一行
8data_line2?=?file_obj.readline()
?File ->?file_obj.readlines([size])
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5#?readlines()?函数读取所有行
6#?遍历每行
7fordata_lineinfile_obj.readlines():
8#?去除首尾多余的空格????????????????????????
9data_line?=?data_line.strip()
10
11#?关闭文件
12file_obj.close()
?File ->?file_obj.flush()
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5#?刷新缓冲区
6file_obj.flush()
7#?关闭文件
8file_obj.close()
?File ->?file_obj.close()
1#?使用读写的模式打开文件
2file_obj?=?open("/usr/load/test.txt","rw+")
3#?获取文件名称
4print"文件名为:?",?file_obj.name
5#?关闭文件
6file_obj.close()