内容提要
概述
文件的常见操作
目录的常见操作
一、概述
数据的存储可以使用数据库,也可以使用文件。
数据库保持了数据的完整性和关联性,且使用数据更安全、可靠。使用文件存储数据则非常简单、易用,不必安装数据库管理系统等运行环境。
文件通常用于存储应用软件的参数或临时性数据,是一个命名的比特集合,存储在硬盘、U盘、闪存条等辅助存储设备中。
文件分为两类:文本文件和二进制文件。 Python提供了os、os.path、shutil等模块处理文件。
文本文件的特点:
基本是字符串。
Python源代码文件和HTML文件等都属于文本文件。 可使用任何文本编辑器进行编辑,对人来说相对容易阅读和修改。 对程序来说,无法直接阅读文本文件。
通常,每种文本文件都需要使用相应的分析程序来阅读,例如,Python使用专用分析程序来帮助阅读.py文件,而要阅读HTML文件,需要使用专用于HTML的分析程序。
通常比等价的二进制文件大。需要通过网络发送大型文本文件时,一般要进行压缩(如压缩成zip格式),以提高传输速度和节省磁盘空间。
二进制文件的特点:
通常是人无法直接阅读的,且使用常规的文本编辑器无法查看。
在文本编辑器中打开二进制文件时,显示的是一堆乱码。有些类型的二进制文件(如JPEG图像)需要使用特殊查看器显示其内容。 占据的空间通常比等价的文本文件小。
对程序来说,可以直接阅读二进制文件。虽然二进制文件各不相同,但通常无需编写复杂的分析程序来读取它们。
通常与特定程序相关联,若没有该程序,通常无法使用它们。有些流行的二进制文件的格式是公开的,如果愿意,可以自己编写读写它们的程序,但通常需要花费很大的功夫。
二、文件的常见操作
文件的常见操作包括: 打开文件 读写文件 复制文件 删除文件
1、文件的创建
文件的打开或创建可以使用函数open。
该函数可以指定处理模式,设置打开的文件为只读、只写或可读写状态。
格式: open(file, [mode[, buffering]])—>file object
说明:
参数file是被打开的文件名。若文件file不存在,open()将创建该文件,然后再打开该文件。
参数mode是指文件的打开模式。打开模式如表8-1。
参数buffering设置缓存模式。0表示无缓冲;1表示行缓冲;如果大于1则表示缓冲区的大小,,-1(或者任何负数)代表使用默认的缓冲区大小。以字节为单位。 open()返回1个file对象,file对象可以对文件进行各种操作。
表8-1:文件的打开模式
关于file类:
file类用于文件管理,可以对文件进行创建、打开、读写、关闭等操作。
文件的处理一般分为三个步骤:
创建并打开文件,使用open()函数返回1个file对象。
调用file对象的read()、write()等方法处理文件。
调用close()关闭文件,释放file对象占用的资源。
表8-2:file类的常用属性和方法
例8-1:文件的创建、写入和关闭
例8-2:在文件尾添加内容
2、文件的读取
文件的读取有多种方法,可以使用readline()、readlines()或read()函数读取文件。
(1)按行读取方式readline() readline()每次读取文件中的一行,需要使用永真表达式循环读取文件。
但当文件指针移动到文件的末尾时,依然使用readline()读取文件将出现错误。
因此程序中需要添加1个判断语句,判断文件指针是否移动到文件的尾部,并且通过该语句中断循环。
例8-3:使用readline()读文件
(2)多行读取方式
函数readlines()可一次性读取文件中多行数据。
使用readlines()读取文件,需要通过循环访问readlines()返回的内容。
例8-4:使用readlines()读文件
(3)一次性读取方式
读取文件最简单的方法是使用read(),read()将从文件中一次性读出所有的内容,并赋值给1个字符串变量。
例8-5:使用read()读文件
例8-6:使用read()返回指定字节的内容
3、文件的写入
文件的写入同样有多种方法,可以使用write()、writelines()方法写入文件。
例8-1使用write()方法将字符串写入文件,而writelines()方法可将列表中存储的字符串序列写入文件。
例8-7:使用writelines()写文件
将字符串插入到文件开头:
相比在文件末尾添加字符串,将字符串写入文件开头不那么容易,因为操作系统没有提供这样的支持。
解决的方法是:将文件读取到一个字符串中,将新文本插入到该字符串,再将这个字符串写入原来的文件。
例8-8:将字符串插入到文件开头
4、文件的删除
删除文件需要使用os模块和os.path模块。 os模块提供了对系统环境、文件、目录等操作系统级的接口函数。
表8-3列出了os模块常用的文件处理函数。 注意:os模块的open()函数与内置的open()函数的用法不同。
表8-3:os模块常用的文件处理函数
表8-4:os.path模块常用函数
例8-9:文件的删除
5、文件的复制
file类并没有提供直接复制文件的方法,但可以使用read()、write()方法来实现复制文件的功能。
例8-10:用read()、write()实现文件复制
复制文件的其他方法:
shutil模块是另一个文件、目录的管理接口,提供了一些用于复制文件、目录的函数。
其中,copyfile()函数可以实现文件的复制,move()函数可以实现文件的剪切。
copyfile(src, dst) 其中,参数src表示源文件的路径,dst表示目标文件的路径,均为字符串类型。
Move(src, dst, *, follow_symlinks=True)
例8-11:使用shutil模块实现文件的复制和移动
6、文件的重命名
os模块的函数rename()可以对文件或目录进行重命名。
在实际应用中,经常需要将某一类文件修改为另一种类型,即修改文件的后缀名。
可以通过函数rename()和字符串查找函数来实现。
例8-12:修改文件名
例8-13:修改后缀名
7、文件内容的搜索和替换
文件内容的搜索和替换可以使用字符串查找和替换来实现。
例8-14:从hello.txt文件中统计字符串’hello’出现的次数。
程序及执行结果:
例8-15:将hello.txt中的字符串’hello’全部替换为’hi’,并将结果存入hello2.txt中
8、处理二进制文件
Python中,通常使用pickle模块处理二进制文件。
可以使用pickle.dump将数据结构存储到磁盘,之后再用pickle.load从磁盘获取数据结构。
pickle不能用于读写特殊格式的二进制文件,如GIF文件。对这种格式的文件,必须逐字节处理。
例8-16:二进制文件存取
三、目录的常见操作
Python的os模块和os.path模块还提供了一些针对目录操作的函数。
1、创建目录和删除目录 os模块提供的常用目录处理函数见表8-4。
表8-4:os模块常用目录处理函数
例:目录的创建和删除
2、目录的遍历
例8-18:使用os.walk()遍历目录
3、其他目录相关操作
对目录的常见操作还有: 返回当前目录中的文件和文件夹; 返回当前目录中的指定类型文件;
返回当前目录中所有文件的大小总和等。
例8-19:返回当前目录中的文件和文件夹
例8-20:返回当前目录或指定目录中的.py文件
例8-21:返回当前目录中所有文件的大小总和