文件读写操作

使用open()函数创建文件对象 file object,调用文件对象的方法即可对文件进行读写。

open() 函数

open(file[, mode = ‘r’][, encoding=None])

参数:以下只列出了常用的参数

  • file,一个 path-like object,将要打开的文件的路径字符串(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。

  • mode,可选,字符串,用于指定打开文件的模式,默认值是 'r'(以文本模式打开并读取)。可用的模式有:

    字符意义
    't'文本模式(默认)
    'x'写模式,如果文件已存在则失败
    'b'二进制模式
    '+'打开一个文件进行更新(可读可写)
    'r'只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
    'rb'以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
    'r+'打开一个文件用于读写,文件的指针将放在文件的开头
    'w'打开一个文件只用于写入。如果文件已存在,清空内容从头编辑;如果文件不存在,创建新文件
    'wb'以二进制格式打开一个文件只用于写入。文件存在则清空并从头开始编辑;文件不存在则创建新文件
    'w+'打开一个文件用于读写。若文件已存在,则清空内容并从头编辑;若文件不存在,则创建新文件
    'wb+'以二进制格式打开一个文件用于读写。若文件已存在,则清空内容并从头编辑;若文件不存在,则创建新文件
    'a'打开一个文件用于追加。如果文件已存在,文件指针将会被放在文件的结尾,新内容会被放在原内容之后;如果文件不存在,则创建新文件
    'ab'以二进制格式打开一个文件用于追加。如果文件已存在,文件指针将会被放在文件的结尾,新内容会被放在原内容之后;如果文件不存在,则创建新文件
    'a+'打开一个文件用于读写。如果文件已存在,文件指针将会被放在文件的结尾,新内容会被放在原内容之后;如果文件不存在,则创建新文件
    'ab+'以二进制格式打开一个文件用于读写。如果文件已存在,文件指针将会被放在文件的结尾,新内容会被放在原内容之后;如果文件不存在,则创建新文件
  • encoding,可选,只在文本模式下使用,用于解码或编码文件的编码的名称。默认编码是依赖于平台的(Windows 中文是 GBK,Linux 和 Mac 是 utf-8)

返回:返回一个 文件对象 file object

在文本模式下读取时,CPython 默认会把平台特定的行结束符(Unix 上的 \n, Windows 上的 \r\n )转换为 \n。在文本模式下写入时,默认会把出现的 \n 转换回平台指定的结束符。这样的修改对文本文件来说没有问题,但是会破坏二进制例如 JPEG 或 EXE 文件中的数据 ,所以在读写二进制数据时应使用二进制模式。

注意:使用 open() 函数打开文件,操作后一定要保证关闭文件对象,可以调用 close() 方法,或者使用 with 语句。

如果文件对象没有被显式地关闭,文件会保持打开状态一段时间,具体的时长取决于 Python 的垃圾回收器,在这期间文件对象会持续占用系统资源。

with 语句支持通过上下文管理器所定义的运行时上下文概念。上下文管理器是个对象,它定义了在执行 with 语句时要建立的运行时上下文。此对象的实现使用了一对专门方法,允许用户自定义类来定义运行时的上下文,在语句体被执行前进入该上下文,并在语句执行完毕时退出该上下文

with 语句格式:

with expression [as target]:
    suite

文件操作中的 with 语句:

with open(file, 'r', encoding='utf-8') as f:
    for i in f:
        print(i)

file 对象的方法

  1. file.close()

    关闭文件,文件关闭后不能再进行读写操作

  2. file.read([size])

    从文件读取指定的字符数并返回,如果 size 未给定或为负,则读取所有

  3. file.readline([size])

    从光标位置开始,读取该行指定的字符数并返回,如果 size 未给定或为负则读取整行(包含行尾的换行\n)

  4. file.readlines([sizeint])

    从光标位置开始,读取多行,读取的行数能够包含指定的字符数,如果 size 未给定或为负,则读取所有行并返回。返回一个列表,每一行为一项

  5. file.write(str)

    将字符串写入文件,返回的是写入字符串的长度

  6. file.writelines(sequence)

    将只含有字符串的序列写入文件

  7. file.flush()

    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入

  8. file.tell()

    返回光标当前位置,位置是字节数,不是字符数

  9. file.seek(offset[, whence])

    设置光标位置, offset 是以字节数为单位的偏移量,whence是起始位置,只有 3 种取值,0 – 文档开头,1 – 当前位置, 2 – 文档末尾。返回 offset 值

文件重命名

需要导入 OS 模块,使用模块中的 rename() 函数

import os
os.rename(old_file_name, new_file_name)
# 如果文件在当前工程目录下,直接写新旧文件名即可,如果不在则需要写文件的路径

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!