“Life is short, You need Python” – Bruce Eckel
Environment
- OS: macOS Mojave
- Python version: 3.7
- IDE: Jupyter Notebook
文章目录
0. 写在前面
本文记录一些 Python 打开关闭文件的基本方式和读取写入的方法,主要以文本文件为例。而在实际操作中,更多的会使用第三方库(如Pandas 中 Series 和 DataFrame 对象的方法;open-cv 或 PIL 的函数)对结构化数据或图片数据进行读取或保存。
1. 文件的打开和关闭
要对文件内容进行操作,首先需要使用 open
函数打开文件,得到文件指针;要对写入的内容进行保存,需要关闭文件,调用文件指针的 close
方法。
1.1 打开文件
在 .py 文件同目录下放一个 zen.txt 文件,内容如下
open(file='文件路径', mode='打开模式', encoding='操作文件的字符编码')
返回文件对象f
。当文件与当前的 Python 文件在同一目录,则可以直接对 file 传入文件名。f.close()
调用方法关闭文件
例
# 非绝对路径时,会在 Python 同目录下寻找该文件
f = open('zen.txt', 'r', encoding='utf-8')
f.read()
# 'Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.'
f.close()
1.2 关闭文件
如上所述,在对文件操作完成后,需要调用 f.close()
关闭文件,这样才会将修改写入硬盘。注意,由于 Python 有垃圾回收机制,在文件指针对象的引用数为零时将其销毁,所以不会造成内存泄露。
Alternatively,更常用 with
加缩进的结构,可以不用调用 close
,在 with
结构运行结束之后文件将自动关闭
with open('文件路径', '打开模式', encoding='操作文件的字符编码') as f:
对文件进行的操作
例
with open('zen.txt', 'r', encoding='utf-8') as f:
f.read()
# 'Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.'
1.2 打开的模式
open
函数中的 mode
参数传入的值将确定读写模式和文件类型
读写模式 | 打开模式 | 注 |
---|---|---|
‘r’ | 只读 | 默认。若文件不存在则报错 ;文件指针在开头 |
‘r+’ | 读写 | 若文件不存在则报错;文件指针在开头,写入多少覆盖多少原有的内容 |
‘w’ | 只写 | 创建新文件,若存在同名文件则以空白文件覆盖之(危) |
‘w+’ | 读写 | (同上) |