龙空技术网

python基础模块三剑客:sys、os、shutil(增加示例代码)

陈锋 44

前言:

此时同学们对“os和sys模块的作用”大约比较珍视,姐妹们都想要学习一些“os和sys模块的作用”的相关内容。那么小编同时在网络上搜集了一些关于“os和sys模块的作用””的相关资讯,希望咱们能喜欢,姐妹们快快来了解一下吧!

注:上个篇由于不熟悉头条号编辑器,导致示例代码丢失。现在全部以图片的形式加回。

有同学问了个问题:在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已经为我们考虑过系统兼容的问题了。在python的官方网站上有以下的描述:

Runs anywhere, including Mac OS X, Windows, Linux, and Unix, with unofficial builds also available for Android and iOS.

所以,在开始更深入的学习之前,我们有必要先来学一下基本的与操作系统(os)、文件(sys)、shell(shutil)打交道的方式。os, sys, shutil这三个模块/包是python安装时自带的,基本上能覆盖我们的需求。

研究os、sys、shutil提供了哪些函数

我们先用dir()来看看这三个模块/包提供了哪些函数,然后挑一些常用的函数介绍下。import os模块后,用dir(os)来查看os提供了哪些函数,如下(常用的用蓝色标出):

sys和shutil就留给同学们自己做实验了。

把研究结果整理如下

我们把函数名字看起来眼熟的整理如下:

只列个函数名字有什么用?怎么没有用法介绍?函数太多,我不想也不太实际为每个函数都写一段完整的用法说明和使用示例。我还是来介绍下怎么查帮助文档吧。

搞懂每个函数的用途和用法

举个例子,如果你想看看os.getcwd和os.popen的用法,你可以在terminal里如下操作:

还不懂怎么办?

python的书百度、bing、google(如果你在国外、或者你有VPN/VPS)知乎、博客github上找些开源代码参考身边的同学、同事、朋友微信群

当然还可以阅读本号ExASIC的《Python在芯片中的应用》系列文章。

疑难问题辨析

os.mkdir与os.makedirs

mkdir创建单个目录,而makedirs创建一串目录,类似shell命令make -p。

os.path.curdir、os.path.abspath、os.path.dirname、os.path.basename

curdir是属性,不是函数,返回一个字符串‘.’abspath返回完整的路径。dirname和basename的输入参数是完整路径,basename返回文件名,dirname返回文件名前面的路径。

所以说,dirname和basename并不会判断文件或路径是否真实存在,只是对提供的字符串做处理。

os.path.isdir、os.path.isfile、os.path.islink

这几个函数不只是字符串处理哦,文件或目录不存在时会报错。从名字上就可以看出它们的功能,判断是否是文件、目录、软链接,返回True和False。

os.path.split、os.path.splitext、os.path.join

split是把目录和文件分开,splitext是把文件名和后缀名分开,join把目录、文件用/组合成路径。

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完毕后,打印成功提示

参考脚本:

标签: #os和sys模块的作用