文件操作

编写程序来解决实际项目时,很多时候都离不开文件和文件系统的操作。程序本身就是保存在文件系统的文件中的。文件既可以保存程序代码,也可以保存各种输入与输出数据。

除了提供文件操作基本的函数之外,Python 还提供了很多模块,例如 fileinput 模块、pathlib 模块等,通过引入这些模块,我们可以获得大量实现文件操作可用的函数和方法(类属性和类方法),大大提供编写代码的效率。

1. 文件操作基础

Python 中可以通过内建的文件打开函数 open() 来打开文件,并用相关的方法读写文件的内容,供程序处理和使用,而文件也可以看作是 Python 中的一种数据类型。当使用 Python 的内置函数 open() 打开一个文件后,就返回一个文件对象。其原型如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中参数所代表的作用:

参数名 说明
filename 要打开的文件名
mode 可选参数,文件打开模式
bufsize 可选参数,缓冲区大小
encoding 文件编码类型,如'gbk', 'utf-8'等,以避免读取文件内容出现乱码
errors 编码错误处理方法
newline 换行符模式,例如'\n', '\r'
closefd 控制在关闭文件时是否彻底关闭文件

mode 是打开文件的操作模式字符串,常用的模式字符如下:

模式字符 说明
r 只读模式
w 文本写入,并先清空文件(慎用),文件不存在则创建
a 文本写,如果文件存在则在末尾追加,不存在则创建
b 组合字符,二进制模式,例如:'rb'表示二进制读
x 文本写,排它性创建,如果文件已存在则失败
+ 组合字符,读取与写入,例如:'r+' 表示同时读写
t 组合字符,文本模式(默认),例如:rt 一般省略 t

组合字符是指可以与模式字符组合使用:

组合模式 含义
rb 二进制只读,通常用于打开图片
wb 二进制写,通常用于打开图片
ab 二进制追加写,
r+/a+ 读与追加写
w+ 读与覆盖写

常用的文件操作及其作用

文件操作函数 说明
file.read(n) 将整个文件读入到字符串中,或指定前 n 字节
file.readline([n]) 读入文件的第一行到字符串中,或该行的前 n 字节
file.readlines() 将整个文件按行读入到列表
file.write(s) 向文件中写入字符串
file.writelines(lines) 向文件中写入一行数据列表
file.close() 关闭打开的文件

1.1. 基本使用

在当前目录下手动创建一个文件命名为 'a.txt', 并写入以下内容

测试语句1
测试语句2
测试语句3
# open打开文件
fb = open(file="a.txt", encoding='utf-8')
# 读取文件
ct = fb.read()
# 打印文件内容
print(ct)
# 手动关闭文件
fb.close()

# 使用file.readline()
# open打开文件
fb = open(file="a.txt", encoding='utf-8')
# 读取文件
while 1:
    line = fb.readline()
    if not line:
        break
    else:
        print(line)
# 手动关闭文件
fb.close()

# 写入内容
# open打开文件
fb = open(file="a.txt", mode='w', encoding='utf-8')
fb.write('覆盖写入新内容')
fb.close()

# 追加写入新内容
fb = open(file="a.txt", mode='a', encoding='utf-8')
fb.write('追加写入新内容')
fb.close()

注意:进行文件处理时经常会碰到相对路径和绝对路径的问题。

打开文件,读取数据数据时,文件的完整路径必须存在,不然就会报错。

绝对路径(absolute path):它指定了文件在电脑中的具体位置,以 windows 电脑为例:

D:\PythonBasisTutorial\a.txt

相对路径():一般是指相对当前脚本的路径,比如上面的案例中的 a.txt,因为与当前程序在同一个文件夹下,所以可以直接使用 a.txt 作为文件名来操作。

1.2. with 上下文管理

解决经常会忘记关闭文件句柄,造成资源浪费,所以处理文件时往往使用 with 语句进行上下文管理。

with + open(文件地址)as 函数名:
    pass

使用 with 上下文管理最大的好处就是不需要你手动调用 fs.close(),自动帮你关闭文件,示例如下:

with open(file=r"a.txt", encoding="utf-8") as fb:
    content = fb.read()
    print(content)

with open(file=r"a.txt", mode='w', encoding="utf-8") as fb:
    fb.write('使用 with 覆盖写入新内容')

with open(file=r"a.txt", mode='a', encoding="utf-8") as fb:
    fb.write('使用 with 追加写入新内容')

2. 常用文件和目录操作

在计算机系统中操作时,就免不了要与文件和目录打交道。对一些比较繁琐的文件和目录操作,可以使用 Python 提供的 OS 模块来进行。OS 模块中包含很多操作文件和目录的函数,可以方便地进行重命名文件,添加/删除目录,复制目录/文件等操作。

以下几个 OS 模块中常用的函数需要学习一下:

函数名 说明
os.getcwd() 获取当前的路径,当前路径指的是所运行程序的目录
os.listdir(path) 获取指定目录中的内容
os.mkdir(path) 创建目录
os.rmdir(path) 删除目录
os.path.isdir(path) 判断是否是目录
os.path.isfile(path) 判断是否是文件
os.walk(path) 遍历指定目录下的所有文件和子目录

示例:

import os

# 获取当前目录
print(os.getcwd())

# 获取当前目录下的所有内容
print(os.listdir(os.getcwd()))