对文件的操作算是Python
中一个基础又重要的知识点了,无论是在爬虫、数据分析、Web开发,还是在编写图形界面、进行数据分析,都有可能需要用到文件相关的操作。
今天就来总结性地学习和回顾一下,Python各类文件处理。
文章目录
一、open()
模式
open()
函数
open(文件名,操作模式)
函数用来以指定的模式打开一个给定文件名的文件。
文件操作的基础模式
列名 | 列名 |
---|---|
w | 写模式:将擦除文件的内容,重新写入 |
r | 读模式:只读取文件的内容 |
a | 追加模式:在文件内容最后追加内容 |
实例演示
使用w
模式写入文件内容
使用r
模式读取文件内容
使用a
模式追加文件内容
二、获取目录列表
基础的目录列表获取函数
通过os
模块
os.listdir(目录名)
:其接受一个目录名作为参数,返回一个列表,列表中包含目录下的所有文件名和子目录名;os.scandir(目录名)
:其行为类似于listdir()
,但是其返回的是一个文件对象的迭代器,而非一个字符串。
通过pathlib
模块
pathlib.Path.iterdir()
:其工作在一个path
对象上,并返回一个类似于scandir()
的迭代器对象。
实例演示
文件夹的结构如下所示:
使用os.listdir()
获取
使用os.scandir()
获取
使用pathlib
获取
三、获取文件属性
Python中有丰富的函数和方法用来获取文件的信息。
通过os
模块
os.stat(路径字符串)
,给定一个文件或文件夹路径作为参数,返回一个stat_result
对象;os.scandir(目录名称)
,这个方法上面我们介绍过,其返回一个可迭代对象,我们遍历这个可迭代对象,每一个遍历的对象都有一个stat()
方法,其返回值与os.stat()
一样。
通过pathlib
模块
pathlib.Path.iterdir()
,其返回值中的每一个对象都有一个stat()
方法,和os.scandir()
一样。
实例演示
使用os.stat()
其返回的stat_result()
对象内包含如下常见的信息:
st_mode
,文件模式:包括文件类型和文件模式位(即权限位)。st_ino
,与平台有关,但如果不为零,则根据 st_dev 值唯一地标识文件。通常:- 在 Unix 上该值表示索引节点号 (inode number)。
- 在 Windows 上该值表示 文件索引号 。
st_dev
,该文件所在设备的标识符。st_nlink
,硬链接的数量。st_ui
,文件所有者的用户 ID。st_gid
,文件所有者的用户组 ID。st_size
,文件大小(以字节为单位),文件可以是常规文件或符号链接。符号链接的大小是它包含的路径的长度,不包括末尾的空字节。st_atime
,最近的访问时间,以秒为单位。st_mtime
,最近的修改时间,以秒为单位。st_ctime
,取决于平台:- 在 Unix 上表示最近的元数据更改时间,
- 在 Windows 上表示创建时间,以秒为单位。
使用os.scandir()
四、创建目录
创建目录依然可以借助os
模块和pathlib
模块。
通过os
模块
os.mkdir(目录名)
,通过给定的目录名,创建单个目录;os.makedirs(目录路径)
,创建一个完整的目录树;
通过pathlib
模块
pathlib.Path.mkdir()
,从给定的Path
对象创建一个目录;
实例演示
五、删除文件和目录
删除文件
通过os
模块
os.remove(文件路径)
,删除单个文件,如果文件不存在,则抛出FileNotFound
异常,如果路径为目录,则抛出IsADirectoryError
异常;os.unlink(文件路径)
,与os.remove()
相同;
通过pathlib
模块
pathlib.Path.unlink()
,删除Path()
对象文件。
删除目录
删除单个目录
os.rmdir(目录路径)
,删除一个指定的目录路径,如果目录不为空,则抛出OSError
异常;pathlib.Path.rmdir()
,删除路径对象。
删除目录树
shutil.rmtree(目录路径)
,删除一个完整的目录树;
实例演示
删除文件
删除目录
六、文件名模式匹配
有时候需要对文件名进行模式匹配(包括正则)模糊查询,就需要用到文件名模式匹配相关的函数和方法了。
.startswith()
和endswith()
方法,两者都在字符串上运行,并且在处理文件名时可以使用;fnmatch.fnmatch(文件名,匹配模式)
,检测 filename 字符串是否匹配 pattern 字符串,返回 True 或 False。glob.glob(匹配模式)
,返回匹配 pathname 的可能为空的路径名列表,其中的元素必须为包含路径信息的字符串。pathlib.Path.glob(匹配模式)
,类似于与glob
,但是基于Path
对象进行操作。
实例演示
字符串处理
使用fnmatch
七、遍历目录树和处理文件
os.walk(目录路径,topdown=True)
,生成目录树中的文件名,方式是按上->下或下->上顺序浏览目录树。对于以 top 为根的目录树中的每个目录(包括 top 本身),它都会生成一个三元组 (目录路径, 目录名列表, 文件名列表)。
实例演示
八、临时文件和目录
tempfile.TemporaryFile(模式)
,以指定模式创建和打开一个临时文件;tempfile.TemporaryDirectory()
,创建一个临时目录并返回它;
实例演示
九、复制、移动和重命名文件
复制
shutil.copy(源,目标)
,将源文件复制到目标,如果目标为一个目录,则使用源相同的文件名;shutil.copytree(源目录,目标目录)
,将以 源目录 为根起点的整个目录树拷贝到目标目录并返回目标目录。
移动和重命名
shutil.move(源,目标)
,将一个文件或目录从源移动到目标;os.rename(现在名称,新名称)
,重命名一个文件或目录;
十、归档和压缩
zipfile.Zipfile(压缩包名,模式)
,以指定的模式打开一个压缩包;zipfile.Zipfile().extract(文件名)
,从zip文件中提取给定的文件;shutil.make_archive(基础文件名,格式名,根路径)
,从给定的参数中压缩打包一个文件夹为压缩包;shutil.unpack_archive(压缩包文件名,提取到的目录)
,解压一个压缩包到指定目录;
实例演示
十一、读取多个文件
fileinput.input([文件名列表])
,从给定的文件名列表中读取每一个文件;
文章版权所有:州的先生博客,转载必须保留出处及原文链接