Python文件操作指南:如何在Windows和Linux系统中复制、删除和重命名文件
上个篇因为不熟悉头条号编辑器,所以导致示例代码丢失了。现在已经全部以图片的形式加回来了。

有同学提出了一个问题,那就是在 python 中怎样进行复制文件、删除文件以及重命名文件的操作呢?
有个同学知道os.system(),就回答说:
os.system('cp a.v b.v')
os.system('rm b.v')
os.system('mv a.v b.v')
那如果是windows系统呢?
有个熟悉DOS命令的同学回答说:
os.system('copy a.v b.v')
os.system('del b.v')
os.system('rename a.v b.v')
有个同学找到一个方法,他说这个方法是“通用的”。他还说在 windows 上可以安装类 unix 小工具,之后就可以继续使用 linux 的方法。
Python 已经为我们考虑过系统兼容的相关问题。在其官方网站上有着如下的描述:
可以在任何地方运行,其中包括 Mac OS X、Windows、Linux 和 Unix。并且还有针对 Android 和 iOS 的非官方版本可供使用。
os、sys、shutil 这三个模块/包在 python 安装时就自带了,基本上能够覆盖我们的需求。
研究os、sys、shutil提供了哪些函数
我们首先使用 dir() 去查看这三个模块或包提供了哪些函数。接着,挑选一些常用的函数进行介绍。在导入 import os 模块之后,通过 dir(os) 来查看 os 提供了哪些函数,具体如下(常用的以蓝色进行标记):
sys和shutil就留给同学们自己做实验了。
把研究结果整理如下
我们把函数名字看起来眼熟的整理如下:
只列出函数名字是没有用处的。为何没有用法介绍呢?因为函数数量众多,我既不想也不太可能为每个函数都撰写一段完整的用法说明和使用示例。那我就来介绍一下如何查找帮助文档吧。
搞懂每个函数的用途和用法
举个例子,倘若你期望查看 os.getcwd 以及 os.popen 的用法,那么你能够在 terminal 中进行如下的操作:
还不懂怎么办?
可以阅读本号 ExASIC 的《Python 在芯片中的应用》系列文章。
疑难问题辨析
os.mkdir与os.makedirs
mkdir 用于创建单个目录。makedirs 则用于创建一串目录,其功能类似于 shell 命令 make -p。
os.path 包含 curdir、abspath、dirname 和 basename 等属性。os.path.curdir 表示当前目录。os.path.abspath 可获取绝对路径。os.path.dirname 用于获取路径的目录部分。os.path.basename 则用于获取路径的基本名称部分。
curdir 是一个属性,并非函数,它能返回一个字符串“.”。abspath 可以返回完整的路径。dirname 和 basename 的输入参数是完整路径,basename 会返回文件名,dirname 则会返回文件名前面的路径。
所以,dirname 和 basename 不会去判断文件或路径是否真实存在。它们只是对所提供的字符串进行处理。
os.path 可以判断是否为目录,os.path 能够判断是否为文件,os.path 还可以判断是否为链接
这些函数不仅仅可用于字符串处理呢。当文件或目录不存在的时候,它们会报错。从它们的名字上,能够看出其功能,即可以判断是否为文件、目录或者软链接,并且能够返回 True 和 False。
os.path 可以进行拆分操作,如 os.path.split;也可以进行扩展名的拆分,如 os.path.splitext;还可以进行路径的拼接,如 os.path.join。
split 的作用是将目录与文件进行分离;splitext 的作用是把文件名和后缀名进行分开;join 能够把目录和文件通过“/”组合成路径。
os.path 可以获取文件的大小、访问时间、创建时间和修改时间,分别对应 os.path.getsize、os.path.getatime、os.path.getctime、os.path.getmtime 这几个函数。
os.path.getsize 用于获取文件的大小。os.path.getatime 表示最后一次 access 时间,其可以是创建、修改或读等操作所对应的时间。os.path.getctime 代表最后一次 change 时间,该时间可以是修改、改变权限或改变所有者等操作所对应的时间。os.path.getmtime 是最后一次 modify 时间,包含创建、修改等情况。文件的更多信息可以通过os.stat()来获取。
写个实用的脚本/代码
我们在进行仿真的时候,需要依据 testcase 的名字来创建一个仿真目录。以下是具体的事项:
从命令行获取 testcase 名以确认项目根目录。获取当前目录的相对路径,接着使用 find 命令来获取 testcase 的类别。若类别不存在,就新建类别目录并生成 Makefile。然后进入类别目录。若 testcase 目录不存在,就新建该目录,并创建仿真脚本的软链接和 Makefile。完成这些操作后,打印成功提示。
参考脚本: