文件操作
编写程序来解决实际项目时,很多时候都离不开文件和文件系统的操作。程序本身就是保存在文件系统的文件中的。文件既可以保存程序代码,也可以保存各种输入与输出数据。
除了提供文件操作基本的函数之外,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()))