一, 文件操作基本流程
计算机系统分为: 计算机硬件, 操作系统, 应用程序三部分
我们用 python 或其他语言编写的应用程序若想要把数据永久保存下来, 必须要保存于硬盘中, 这就涉及到应用程序要操作硬件, 众所周知, 应用程序是无法直接操作硬件的, 这就用到了操作系统操作系统把复杂的硬件操作封装成简单的接口给用户 / 应用程序使用, 其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念, 用户或应用程序通过操作文件, 可以将自己的数据永久保存下来
有了文件的概念, 我们无需再去考虑操作硬盘的细节, 只需要关注操作文件的流程:
- #1. 打开文件, 得到文件句柄并赋值给一个变量
- f=open(a.txt,r,encoding=utf-8) #默认打开模式就为 r
- #2. 通过句柄对文件进行操作
- data=f.read()
- #3. 关闭文件
- f.close()
打开一个文件包含两部分资源: 操作系统级打开的文件 + 应用程序的变量在操作完毕一个文件时, 必须把与该文件的这两部分资源一个不落地回收, 回收方法为:
- f.close() #回收操作系统级打开的文件
- del f #回收应用程序级的变量
其中 del f 一定要发生在 f.close() 之后, 否则就会导致操作系统打开的文件还没有关闭, 白白占用资源,
而 python 自动的垃圾回收机制决定了我们无需考虑 del f, 这就要求我们, 在操作完毕文件后, 一定要记住 f.close()
虽然我这么说, 但是很多人是会忘记 f.close(), 这里我们推荐傻瓜式操作方式: 使用 with 关键字来帮我们管理上下文
- with open(a.txt,w) as f:
- pass
- with open(a.txt,r) as read_f,open(b.txt,w) as write_f:
- data=read_f.read()
- write_f.write(data)
注意
二, 文件编码
f=open(...) 是由操作系统打开文件, 那么如果我们没有为 open 指定编码, 那么打开文件的默认编码很明显是操作系统说了算了, 操作系统会用自己的默认编码去打开文件, 在 windows 下是 gbk, 在 linux 下是 utf-8
三, 文件的打开模式
#1. 打开文件的模式有 (默认为文本模式:)
r , 只读模式默认模式, 文件必须存在, 不存在则抛出异常
w, 只写模式不可读; 不存在则创建; 存在则清空内容
a, 只追加写模式不可读; 不存在则创建; 存在则只追加内容
- #1. 全部读出来 f.read()
- f = open(log.txt,encoding=utf-8,mode=r)
- content = f.read()
- print(content)
- f.close()
- #2. 一行行的读
- f = open(log.txt,encoding=utf-8)
- print(f.readline())
- print(f.readline())
- print(f.readline())
- f.close()
- #3: 将原文件的每一行作为一个列表的元素
- f = open(log.txt,encoding=utf-8)
- print(f.readlines())
- f.close()
- #4: 读取一部分 read(n)
- # 在 r 模式下, read(n) 按照字符去读取
- f = open(log.txt,encoding=utf-8)
- print(f.read(3))
- f.close()
- #2. 对于非文本文件, 我们只能使用 b 模式,"b" 表示以字节的方式操作 (而所有文件也都是以字节的形式存储的, 使用这种模式无需考虑文本文件的字符编码图片文件的 jgp 格式视频文件的 avi 格式)
- rb
- wb
- ab
注: 以 b 方式打开时, 读取到的内容是字节类型, 写入时也需要提供字节类型, 不能指定编码
#3,+ 模式 (就是增加了一个功能)
r+, 读写可读, 可写
w+, 写读可写, 可读
a+, 写读可写, 可读
#4, 以 bytes 类型操作的读写, 写读, 写读模式
r+b, 读写可读, 可写
w+b, 写读可写, 可读
a+b, 写读可写, 可读
来源: http://www.bubuko.com/infodetail-2540599.html