目录操作
在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