目录操作

在python中,没有提供直接操作目录的函数或者对象,需要使用内置的os和os.path模块实现

 

os模块是python内置的与操作系统功能和文件系统功能相关的模块

该模块中的语句的执行结构通常与操作系统有关,在不同的操作系统上执行,所得到的的结果可能不同

 

常用的目录操作主要有:

判断目录是否存在

创建目录

删除目录

重命名目录

遍历目录等

 

使用os模块或者os.path模块时,需要先import

 

import os

 

os.getcwd():返回当前的工作目录

os.listdir(path):返回列表,存放指定路径下的文件和目录信息

os.mkdir(path[,mode]):创建目录,只能创建path中的最后一级目录,如果该目录的上一级不存在,则会抛出异常,类似mkdir不加参数

os.mkdirs(path1/path2...[,mode]):创建多级目录,该函数用递归的方法创建目录 ,类似mkdir -p

os.rmdir(path):删除空目录

os.removedirs(path1/path2...):递归删除多级空目录

os.chdir(path):把path设置为当前工作目录

os.walk(top[,topdown][,onerror):遍历目录树,该方法返回一个元组,包括所有路径名、所有目录列表和文件列表3个元素

 

os.path模块也提供了一些操作目录的函数

os.path.abspath(path):用于获取文件或目录的绝对路径

os.path.exists(path):用于判断文件或目录是否存在,如果存在则返回True,否则返回False

os.path.join(path,name):将目录或者文件名拼接起来

os.path.splitext():分离文件名和扩展名

os.path.basename(path):从一个目录中提取文件名

os.path.dirname(path):从一个路径中提取文件路径,不包括文件名

os.path.isdir(path):用于判断是否是有效路径

 

示例1:创建目录

创建目录前,先判断目录是否存在,如果不存在,则创建

if not os.path.exit(path):

os.mkdirs(path)

else:

pass

示例2:删除非空目录

使用os.rmdir()或者os.removedirs()只能删除空目录,删除非空目录需要使用python内置的标准模块shutil的rmtree()函数实现

示例3:os.walk()遍历目录

python中,os的walk()函数用于实现遍历目录的功能

os.walk(top[,topdown][,onerror][,followlinks])

 

top:用于指定要遍历内容的根目录

topdown:可选参数,用于指定遍历的顺序,如果是True,表示自上而下遍历;如果是False,代表自下而上遍历,默认True

onerror:可选参数,用于指定错误处理方式,默认为忽略,如果不想忽略,可以指定一个错误错误处理函数,通常采用默认

followlinks:可选参数,默认情况下,walk函数不会向下转换成解析到目录的符号链接,将该参数值设置为True,表示用于指定在支持的系统上访问由符号链接指向的目录

返回值:返回一个包括3个元素(dirpath,dirnames,filenames)的元组的生成器对象

  • dirpath:表示当前遍历的路径,是一个字符串
  • dirnames:表示当前目录下包含的子目录,是一个列表
  • filenames:表示当前路径下包含的文件,也是一个列表

 

>>> for a,b,c in os.walk("D:\\python\\python3.6.4\\hjc"): 

        for i in b: 

                print(os.path.join(a,i))#所有的目录 

        for i in c: 

                print(os.path.join(a,i))#所有的文件

示例4:拼接路径

把两个路径拼接为一个路径时,不要使用字符串拼接,而要使用os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符

如果采用字符串拼接路径和文件名,path+'分隔符'+file,这里的分隔符对于不同的系统不一样

windows系统的路径分隔符为"\",linux系统的路径分隔符为"/"

os.path.join()会自动查找当前系统的路径分隔符

 

示例5:windows上的路径

windows系统的路径分隔符为"\",python中"\"代表转义字符,直接使用windows路径会报错

解决办法:

  • 对路径分割符"\"进行转义,即将"\"替换为"\\"
  • 将"\"替换为"/"
  • 不进行转义,在path前加"r"或者"R",该字符串将原样输出

 

>>> import os

>>> os.chdir('C:\Users\hjc\Desktop\python')

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

>>> os.chdir(b'C:\Users\hjc\Desktop\python')

>>> os.getcwd()

'C:\\Users\\hjc\\Desktop\\python'

 

在IDLE中不行,但是在脚本的参数中可以,估计是自动做了转换

代码:

import os,sys

file = sys.argv[1]
print(file)
if os.path.exists(file):
    os.chdir(file)
print(os.getcwd())
else:
print('not exits')

 

运行:

D:\projects\demo>python test.py C:\Users\hjc\Desktop\python

C:\Users\hjc\Desktop\python

C:\Users\hjc\Desktop\python