python操作文件目录

版权声明:原创文章转载请注明来源。 https://blog.csdn.net/samll_snail/article/details/85702246

前面的文章我们有讲过 python 对文件的读写操作,但同时文件一定是存在于某个目录下的,所以我们还需要知道 python 对目录的一些常见操作。

关于对目录的操作,都可以使用 os 这个内置的库来实现。

1、获取目录

os.getcwd() 获取当前程序的工作目录,注意并不是指当前程序所在的目录,这里一不小心就会掉坑里去,一会我会详细说明。

os.path.dirname(os.path.realpath(__file__)) 这个才是正确的获取当前文件所在的目录,其中 os.path.dirname 是指去掉文件名称,返回目录路径。

现在有两个目录:

E:\pyinstaller\pyinstaller-develop\py (dir.py 所在目录)

E:\pyinstaller\pyinstaller-develop\py\dir_2 (getpath.py 所在目录)

# -*- coding:utf-8 -*-

#这是getpath.py文件

import os  
import shutil

def getCurPath1():  
    cur_path = os.path.dirname(os.path.realpath(__file__))  
    return cur_path  

def getCurPath2():  
    cur_path = os.getcwd()
    return cur_path  


print('第一种获取方式:'+getCurPath1())  
print('第二种获取方式:'+getCurPath2()) 
# -*- coding:utf-8 -*-

#这是dir.py文件


import os
from dir_2 import getPath

path1 = getPath.getCurPath1()  
path2 = getPath.getCurPath2()

我们直接运行 getpath.py 结果为:

第一种获取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2
第二种获取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2

我们再运行 dir.py 结果又为:

第一种获取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2
第二种获取方式:E:\pyinstaller\pyinstaller-develop\py

从上面的代码中可以知道,os.getcwd() 仅仅只是获取当前最外层调用脚本的路径。如果有其他脚本调用当前脚本,那返回的就是其他脚本所在的目录了,这一点一定要弄明白,还不理解的话,就需要多看几遍,动手操作几遍试试。

2、检查目录

一般对文件的读写操作之前,需要确认其对应的目录是否存在,注意文件的写操作虽然可以自动创建不存在的文件,但那是仅仅限于在程序的当前目录下,对于一个非当前目录的文件进行写操作前还是需要判断其目录是否存在的。

os.path.exists() 可以用来判断目录或者文件是否存在,有的时候目录和文件名可能是相同的,所以我们就再需要使用 os.path.isfile 和 os.path.isdir 来分别判断是否是文件和目录。

# -*- coding:utf-8 -*-

#判断目录或者文件是否存在,参数可以是绝对路径或相对路径,返回布尔值
print(os.path.exists('../dir_2/getPath.py'))

#判断是否是目录,参数可以是绝对路径或相对路径,返回布尔值
print(os.path.isdir('../dir_2'))

3、创建目录

如果检测到目录不存在,我们就需要创建目录。

os.mkdir() 一次只能创建一级目录,也就是说只能一级一级的创建目录,不能一次创建多级目录,有一定的局限性,不建议使用。

os.makedirs() 可以一次性创建多级目录,刚好可以突破上面提到的局限性,推荐使用。

要注意的是如果要创建的目录已经存在了就会报错,所以在创建目录前务必先检测目录。

# -*- coding:utf-8 -*-

#一次只能创建一级目录
os.mkdir('./newdir')

#可一次性创建多级目录
os.makedirs('./newdir/newdir2/newdir3')

4、删除目录

os.rmdir() 删除指定空目录,如果目录非空则报错。

os.removedirs() 删除指定目录下所有空目录,即被删除的空目录的父级目录也是空目录的话也会被删除,依次类推,因此会删除所有的空目录。

shutil.rmtree 则会强制删除指定目录下的所有文件和目录,注意是强制删除,请务必慎用,使用前需要 import shutil 导入。

# -*- coding:utf-8 -*-

#删除指定空目录
os.rmdir('./newdir')

#删除目录下所有空目录
os.removedirs('./newdir/newdir2/newdir3')

#强制删除目录下所有文件和目录,务必慎用
shutil.rmtree('./')

猜你喜欢

转载自blog.csdn.net/samll_snail/article/details/85702246