一、文件操作
1、介绍
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:
1、打开文件,得到文件句柄并赋值给一个变量 2、通过句柄对文件进行操作 3、关闭文件
二、在Python中
#1. 打开文件,得到文件句柄并赋值给一个变量 f=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) #默认打开模式就为r,r 代表只读 #2. 通过句柄对文件进行操作 data=f.read() # r 代表对文件进行读操作 #3. 关闭文件 f.close()
三、f = open(‘a.txt‘,‘r‘) 的过程分析
1、由应用程序向操作系统发起系统调用open(...) 2、操作系统打开该文件,并返回一个文件句柄给应用程序 3、应用程序将文件句柄赋值给变量 f
四、强调!!!
1 # 强调第一点: 2 打开一个文件包含两部分资源:操作系统级打开的文件 + 应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为: 3 1、f.close() # 回收操作系统级打开的文件 4 2、del f # 回收应用程序级的变量 5 6 其中del f 7 一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源, 8 而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close() 9 10 虽然我这么说,但是很多同学还是会忘记f.close(), 对于这些同学,我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文 11 with open(‘a.txt‘, ‘w‘) as f: # w 只写模式,代码运行,文件存在直接清空,文件不存在,新建文件 12 pass 13 14 with open(‘a.txt‘, ‘r‘) as read_f, open(‘b.txt‘, ‘w‘) as write_f: # 同时打开两个文件 15 data = read_f.read() 16 write_f.write(data) 17 18 强调第一点:资源回收
1 #强调第二点: 2 f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。 3 这就用到了字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。 4 5 f=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘)
五、Python 2 中的 file 与 open
1 #首先在python3中操作文件只有一种选择,那就是open() 2 3 #而在python2中则有两种方式:file()与open() 4 两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file
二、打开文件的模式
文件句柄 = open(‘文件路径‘, ‘模式‘,‘字符编码‘)
模式可以是以下方式以及他们之间的组合:
字符 | 含义 |
r | 打开阅读,只读(默认) |
w | 打开写入,首先截断文件 |
a | 打开写入,追加到文件末尾(如果存在) |
b | 二进制模式 |
t | 文本模式,(默认) |
+ | 打开磁盘文件进行更新(读取和写入) |
U | 通用换行符模式(向后兼容;不应在新代码中使用) |