6. 文件操作


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=1whence=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'时,可以实现文件的追加写入操作。

0 条评论

发表评论

暂无评论,欢迎发表您的观点!