文件目录管理
在Python中,你少不了会遇到读写文件,判断目录等问题。我们现在已经有了读写文件的基础。 现在我们玩点更高级的,用Python中提供的 os 库来做文件操作。
这一节主要涉及到的功能:
- 文件目录操作
os.getcwd()
os.listdir()
os.makedirs()
os.path.exists()
- 文件管理系统
os.removedirs()
shutil.rmtree()
os.rename()
- 文件目录多种检验
os.path.isfile()
os.path.exists()
os.path.isdir()
os.path.basename()
os.path.dirname()
os.path.split()
os库¶
os库是Python自带的一个非常有用的模块。如果你做一个系统性的东西,要处理文件输出,读入等问题, 那么你有80%概率会使用到os库中的一些功能。 os模块有非常多功能,我们今天就来侧重将一些你日常会经常使用的。
文件目录操作¶
首先你得知道你在哪?此话怎讲?我当然知道我在那,就在电脑面前做着不可描述的事。 NONONO,我指的是你的当前目录是在哪。当你运行一个程序的时候,通常而言当前目录就是你运行这个程序的目录。 那我们来找找在这个交互式学Python的环境中,你的当前目录是哪?
为了方面我们的后续操作,我还是单独创建一个文件夹,让我们在这个文件夹中做练习吧。 下面我会创建一个 project
的文件夹,后面这个 exist_ok
的意思是当我检测到这个目录存在, 我就睁一只眼闭一只眼,当没事发生,不然这句指令会报错的。 不信你试试,点三次执行,第一遍不填 exist_ok
(默认为False), 第二遍也不填(给你报错), 第三次填 exist_ok=True
,第三次就不报错了。而且在创建完之后,我们也可通过 os.path.exists("project")
来检测是否真的存在这个东西。
你有没有发现,我们无意见又使用了 os 的一个子模块 path
,这个子模块也是很有用的,后面我们会详细介绍。
文件管理系统¶
下面我们来以文件管理系统里面会遇到的情况举例。比如用户注册了我这个系统,我得为这个用户创建一个他的文件夹。
如果用户注销了,我是不是得把它的文件夹删掉?
但是情况越来越复杂,如果你的文件夹里有文件,不为空,就会报错的。
这怎么办呢?把文件一个个删了?太费事了吧,其实这种事情,需要用到另一个库,名字叫做 shutil
,但是你要注意的是, 这个库太强大了,如果你不小心删掉了其他东西,那就真没了,一定要小心!它可以清空整个目录。
随着你的文件系统越来越厉害,你得应付不同用户的不同需求,比如改名字。
文件目录多种检验¶
有了用户目录,还有很多事情是需要判断的,比如有没有某个文件呀,文件路径的一些便捷操作呀。 下面我先建一个文件,然后再对其进行一些鉴别。Python里的 os.path
真的也是非常容易接触到的一个内容。 光是判断这是否是一个文件或者是否是一个文件夹,都有很多种不同的判断方式。
在很多时候,我们的文件是通过传参传进来的,比如我随便告诉你一个文件目录,我想为这个文件创建一个副本,我就得用到三个功能,
- 先拿到文件名 os.path.basename
- 再拿文件夹名 os.path.dirname
- 为副本重命名
- 把目录重新组合 os.path.join
或者,还有个更方便的功能代替拿文件名和文件夹名的工作:
当然 os 和 os.path 都还有非常多有关于文件和文件夹的操作,我只提到了比较重要和常用的内容。 今后如果你发现你的文件操作要经历更复杂的手法,你再去搜一搜,就更容易理解啦。