文件操作

罗大富 BigRich大约 5 分钟Python

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

除了提供文件操作基本的函数之外,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
不需要你手动调用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()))
上次编辑于:
贡献者: Luo