6. 文件操作
1. 文件的打开和关闭
1 . open() 打开函数
大多数文件都存储在外部存储器中,操作时需要先调入内存,才能处理。文件的打开操作就是将文件从外部存储器调入内存的过程,这个过程需要使用open命令,生成file对象。具体的语法操作如下:
<file对象名> = open(<文件名>,<打开模式>,encoding='编码格式')
如果要打开的文件与程序文件不在同一目录下,需要提供文件的路径,可以使用绝对路径或者相对路径。打开模式参数是非强制的,默认文件访问模式是只读(r)。
encoding是编码格式的关键字,而非参数。
| 模式 | 含义 | 文件不存在时的处理 | 文件存在时的处理 | 读写操作 |
|---|---|---|---|---|
'r' |
只读模式,打开文本文件用于读取 | 抛出 FileNotFoundError 异常 |
打开文件,文件指针置于开头 | 仅能读取 |
'w' |
写入模式,打开文本文件用于写入 | 创建新文件 | 清空文件内容,文件指针置于开头 | 仅能写入 |
'a' |
追加模式,打开文本文件用于追加内容 | 创建新文件 | 文件指针置于末尾 | 仅能写入 |
'r+' |
读写模式,打开文本文件进行读写操作 | 抛出 FileNotFoundError 异常 |
打开文件,文件指针置于开头 | 可读写,写入可能覆盖原有内容 |
'w+' |
读写模式,打开文本文件进行读写操作 | 创建新文件 | 清空文件内容,文件指针置于开头 | 可读写 |
'a+' |
读写模式,打开文本文件进行读写操作 | 创建新文件 | 文件指针置于末尾 | 可读写,写入时追加在文件末尾 |
'rb' |
只读二进制模式,打开二进制文件用于读取 | 抛出 FileNotFoundError 异常 |
打开文件,文件指针置于开头 | 仅能读取 |
'wb' |
写入二进制模式,打开二进制文件用于写入 | 创建新文件 | 清空文件内容,文件指针置于开头 | 仅能写入 |
'ab' |
追加二进制模式,打开二进制文件用于追加内容 | 创建新文件 | 文件指针置于末尾 | 仅能写入 |
'rb+' |
读写二进制模式,打开二进制文件进行读写操作 | 抛出 FileNotFoundError 异常 |
打开文件,文件指针置于开头 | 可读写,写入可能覆盖原有内容 |
'wb+' |
读写二进制模式,打开二进制文件进行读写操作 | 创建新文件 | 清空文件内容,文件指针置于开头 | 可读写 |
'ab+' |
读写二进制模式,打开二进制文件进行读写操作 | 创建新文件 | 文件指针置于末尾 | 可读写,写入时追加在文件末尾 |
示例:
f = open('python.txt', 'r', encoding = 'UTF-8')
2. close() 关闭函数
<file对象名> = close()
如果使用open打开文件后没有将文件关闭,会一直占用资源,而且用write写入内容时,内容只在缓存,并没有写入文件,所以,文件打开完成操作以后一定记得关闭。
3. with语句
为了避免忘记关闭文件而造成不必要的麻烦,Python引入了with语句来自动调用close()方法。
语法规则:
with open(<文件名>,<打开模式>) as <File对象名>:
具体操作
2. 文件的读取
1. read()方法
文件对象.read(num)
num表示读取的数据长度。如果没有传入num,那么就表示读取文件中的所有数据。
执行完read方法后,文件的指针已经在文件末尾,需要重新关闭和打开文件指针才会从头开始。
2. readline()方法
文件对象.readline()
readline()方法每次只读取一行数据。
3. readlines() 方法
文件对象.readlines()
将整个文件中的内容进行一次性读取,并且返回一个列表,其中每一行的数据作为一个元素。
文件读取后,文件指针一般会移至文件的末尾,此时在读取时不能读取到任何内容。如果需要移动文件指针,可以采用seek()方法,重新定位文件的指针。
file.seek(offset, whence)
offset:表示移动的字节数,可以是正数(向前移动)或负数(向后移动,需 whence=1 或 whence=2)。
whence:指定 offset 的参考位置,默认为 0。
0(默认)— 从文件开头计算(offset应为非负)。1— 从当前位置计算(offset可为正或负)。2— 从文件末尾计算(offset通常为负)。
4. for循环读取文件行
for 变量 in 文件对象:
操作语句
for循环会遍历文件对象中的每一行数据内容。
3. 文件的写入
1. write() 方法
文件对象.write(str)
将字符串str写入文件。没有返回值。
写入多行时需要手动添加换行符'\n'。
在 Python 中,文件写入(write())默认使用 缓冲机制 来提高性能。缓冲区(buffer)是内存中的临时存储区域,它减少了对磁盘 I/O(输入/输出)操作的频率,从而提升程序效率。直接调用write方法,内容并不会直接写入文件,而是会放在内存的缓冲区中,当调用flush或者close方法(内置了flush功能)后,内容才会真正的写入文件。
2. writelines() 方法
对象名.writelines()
参数以列表的形式一次性写入多行,而且调用writelines写入多行在性能上回比使用write一次性写入要好。
将打开模式设置为'a'时,可以实现文件的追加写入操作。
发表评论