鄙人学习笔记
文章目录
- 文件读写
- 打开文件
- 举个例子1(以读方式打开)
- 举个例子2(以写方式打开)
- 读取文件
- read
- 举个例子1
- readline
- 举个例子2(继续用例子1的note.txt文件)
- readlines
- 举个例子3
- for循环
- 举个例子4
- 写入文件
- write
- 举个例子1
- writelines
- 举个例子2
- 举个例子3(以追加模式写入)
文件读写
对文件实现读写的基本操作步骤为:打开文件,读写文件,关闭文件。
本篇BLOG和本系列的下一篇BLOG会对文件读写的步骤进行一一举例说明。
打开文件
file_object = open(file_name, access_mode='r', buffering=-1)
功能:打开一个文件,返回一个文件对象。
参数:file_name————文件名;
access_mode————打开文件的方式,如果不写默认为‘r’
文件模式 操作
r 以读方式打开.文件必须存在
w 以写方式打开文件.若文件不存在,则创建,若存在,则清空原有内容
a 以追加模式打开.若文件不存在,则创建,若存在,也保留文件内容,并在文件末尾继续写
r+ 以读写模式打开 文件必须存在
w+ 以读写模式打开文件不存在则创建,存在清空原有内容
a+ 以读写模式打开 追加模式
rb 以二进制读模式打开 同r
wb 以二进制写模式打开 同w
ab 以二进制追加模式打开 同a
rb+ 以二进制读写模式打开 同r+
wb+ 以二进制读写模式打开 同w+
ab+ 以二进制读写模式打开 同a+
buffering————参数0表示无缓冲,1表示有行缓冲,如果是大于1表示直接指明缓冲区大小。如果不写或为负数则表示使用系统默认提供的缓冲机制。在py中,通常情况下这个参数我们都不写,直接用系统默认的就OK了.
返回值:成功返回文件流对象。失败得到IOError。
我们用open()打开一个文件,会返回给变量fd一个文件对象。打开一个文件之后,我们就可以对这个文件对象进行读写操作了。
备注:buffering表示,开辟的缓冲区类型。缓冲,表示系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,装满缓冲区在一起送到磁盘中去。这样做,是为了减少与磁盘的交互次数,从而提高效率、保护了磁盘。举个例子:我们在用word写论文时,写了好几页,但没保存(假设word也没有帮我们自动保存),这些没保存的论文,就在缓冲区内。如果这时突然断电(假设我们此时用的是台式电脑)那么写了那么久的论文就会丢失。
图示:
举个例子1(以读方式打开)
我们在主py文件test02.py所在的文件夹内创建一个txt文件,里面写一些数据,如下图所示:
我们在主py文件中读取文件:
结果:
备注:别忘了最后一定要关闭文件!
举个例子2(以写方式打开)
(1)若文件不存在
首先,我们看一下我们的文件列表:
在python中,我们打开一个不存在的文件None.txt:
我们再看一下,文件列表:
新的文件创建出来了!
(2)文件存在, 且文件有内容
查看一下我们的note.txt文件,结果:
清空了!
读取文件
read
read([size])
用来直接读取字节到字符串中,最多读取给定数目个字节。如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾。文件过大时候,不建议直接读取到文件末尾,因为会消耗大量内存,读取时间也会更长,建议在non-blocking模式下使用。
举个例子1
首先看一下我们的数据文件:
(1) 不设置size参数,直接读取到文件末尾
我们读取一下:
输出结果:
(2)一次读取16个字节
①我们按照一次16个字节读取文件:
输出结果:
②我们按照一次1024个字节读取文件:
输出结果:
若一次想要读取的字节数,大于文件的字节数,则文件有多少字节,就读取多少字节。
(3)一次读取8个字节,但仍然想读完全部文件
循环读取:
结果:
readline
readline([size])
读取打开文件的一行(读取下个行结束符之前的所有字节)。没有给定size参数,则读取整行整行,包括行结束符,并作为字符串返回。和 read() 相同,它也有一个可选的 size 参数,默认为 -1,代表读至行结束符。如果提供了该参数,如果行的字节数超过size,则会返回不完整的行。
举个例子2(继续用例子1的note.txt文件)
(1)不设置size参数,读取一行
我们读取一下:
结果:
备注:当我们没有指定size时,readline遇到换行符才会结束。
(1)设置size参数
①我们按照一次4个字节读取行:
结果:
我们再读取一次:
结果:
由结果可知,第二次读取时,readline会沿着第一次读取的末尾,继续读取这一行剩下内容。
readlines
readlines([sizeint])
该方法并不像其它两个输入方法一样返回一个字符串。它会读取所有(剩余的)行然后把它们作为一个字符串列表返回。它的可选参数sizhint代表返回的最大字节大小,当sizeint不足该行的字节数时,也会得到这一行的内容。我们在使用时,一般不设置参数。
举个例子3
读取:
结果:
由结果可知,每一行,读取成了列表中的一个元素。
for循环
for line in fd:
print(line)
文件对象本身也是一个可迭代对象,在for循环中可以迭代文件的每一行。
举个例子4
读取:
结果:
写入文件
write
write(string)
功能与 read() 和 readline() 相反。它把含有文本数据或二进制数据块的字符串写入到文件中去。
举个例子1
我们向空文件None.txt写入数据:
结果:
再写一行:
结果:
备注:如果想换行就要人为添加换行符\n。
writelines
writelines(str_list)
和 readlines() 相反,writelines()方法是针对列表的操作,它接受一个字符串列表作为参数,将它们写入文件。行结束符并不会被自动加入,所以如果需要的话,你必须在调用writelines()前给每行结尾加上行结束符。
举个例子2
我们None.txt写入数据:
结果:
举个例子3(以追加模式写入)
原来的note.txt文件:
写入:
结果:
备注:在追加模式a下,不能read()操作,因为它没有读取得权限。如果读取,则会报错。
如下所示:
结果: