文件处理流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
两种文件操作方式
直接操作(需要手动关闭文件)
使用with
关键字(推荐!自动关闭文件无需手动操作)
注意:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
python2中文件打开
打开文件的模式
基础
打开文件的模式有(默认为文本模式)
强调
在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面。
如果重新以w模式打开文件,则会清空文件内容。
a
与w
相同与异同
相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后。
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式
、视频文件的avi格式
)
在平时工作中,我们只单纯使用r/w/a
,要么只读,要么只写,一般不用可读可写的模式。 大前提: tb模式
均不能单独使用,必须与r/w/a
之一结合使用。
强调:b模式对比t模式
1、在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更为方便。 2、针对非文本文件(如图片、视频、音频等)只能使用b模式。
拓展
回车与换行
操作文件的方法
基础
拓展
文件内光标移动
read(3)
其余的文件内光标移动都是以字节为单位如seek,tell,truncate
。
注意
seek
有三种移动方式0,1,2
,其中1和2必须在b模式
下进行,但无论哪种模式,都是以bytes
为单位移动的.
truncate
是截断文件,所以文件的打开方式必须可写,但是不能用w
或w+
等方式打开,因为那样直接清空文件了,所以truncate
要在r+或a或a+
等模式下测试效果。
之前文件内指针的移动都是由读/写操作而被动触发的,若想读取文件某一特定位置的数据,则需要用f.seek方法
主动控制文件内指针的移动,详细用法如下: f.seek
(指针移动的字节数,模式控制): 模式控制: 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的 强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用
0模式
1模式
练习:使用seek()
实现shell中tail -f (文件日志追加功能)
练习编写文件copy
工具
方法1
方法2
文件的修改
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:
方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件
文件的逐行读取并打印行号
输出
评论区