Python文件处理实用指南

对文件的操作算是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([文件名列表]),从给定的文件名列表中读取每一个文件;

猜你也喜欢

发表评论

邮箱地址不会被公开。