我们使用python对文件进行操作时,难免会涉及到对目录的操作,比如切换工作目录、创建或删除目录等操作。本文主要讲的是目录的基本操作。
一、使用os模块对目录进行操作
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的目录和文件 |
mkdir(path) | 创建目录 |
rmdir(path) | 删除目录 |
chdir(path) | 指定工作目录 |
makedirs(path1/path2/...) | 创建多级目录 |
removedirs(path1/path2/...) | 删除多级目录 |
下面是示例代码:
import os
#1、返回当前的工作目录
cur_path=os.getcwd()
print(cur_path) #D:\blog\python_blog\目录操作
#2、返回路径下的文件和目录
data=os.listdir() #默认返回当前工作目录下的文件和目录,也可以返回指定目录下的文件和目录
print(data) #['使用os模块操作目录.py', '文档1.txt']
path='D:\\1-phython\\python'
files=os.listdir(path) #返回指定目录下的文件和目录
print(files)
#3、创建目录
os.mkdir('目录1') #在当前工作目录下创建指定目录
data2=os.listdir()
print(data2) #['使用os模块操作目录.py', '文档1.txt', '目录1']
#4、删除指定目录
os.rmdir('目录1') #在当前工作目录下删除指定目录
data3=os.listdir() #在当前工作目录下再删除指定目录
print(data3) #['使用os模块操作目录.py', '文档1.txt']
#5、创建多级目录
os.makedirs('目录1/目录2/目录3') #在当前工作目录下创建多级目录
data3=os.listdir()
print(data3) #['使用os模块操作目录.py', '文档1.txt', '目录1']
data4=os.listdir('目录1') #'目录1'是相对路径,此处是相对于当前工作目录的文件路径
data5=os.listdir('目录1\\目录2') #'目录1\\目录2'是相对路径
print(data4) #['目录2']
print(data5) #['目录3']
os.makedirs('D:\\1-phython\\python\\目录1/目录2/目录3') #在指定目录下创建多级目录
print(os.listdir('D:\\1-phython\\python'))
#在Python中,正斜杠(/)通常用于表示文件和目录的路径,而双反斜杠(\)是Windows系统中特有的路径分隔符,又由于\为转义字符,所以表示路径时通过为\\。所以在python中/和\\均可以用于表示文件或目录的路径,但是\\只能在Windows系统中使用。所以其实还是更建议使用正斜杠/,因为它的可移植性更好
#6、删除多级目录
os.removedirs('目录1/目录2/目录3') #删除多级目录
dirs=os.listdir()
print(dirs) #['使用os模块操作目录.py', '文档1.txt']
#7、改变当前工作目录
cur_path=os.getcwd()
print(cur_path) #D:\blog\python_blog\目录操作
path='D:\\1-phython\\python'
os.chdir(path) #修改当前工作目录
cur_path=os.getcwd() #返回当前的工作目录
print(cur_path) #D:\1-phython\python
二、使用os.path模块对目录进行操作
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在 |
join(path,name) | 将路径与目录或者路径与文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从路径中提取文件名(不包括路径名) |
dirname(path) | 从路径中提取文件路径(不包括文件名) |
isdir(path) | 用于判断是否为路径 |
下面是示例代码:
import os
#1、返回指定文件或目录的绝对路径
path=os.path.abspath('文档1.txt') #如果不指名绝对路径,那么这个文件或目录必须是直接在当前工作目录下的,且不能是递归的。如果是递归的,需要指明相对路径
print(path) #D:\blog\python_blog\目录操作\文档1.txt
path=os.path.abspath('目录1') #D:\blog\python_blog\目录操作\目录1
print(path)
path=os.path.abspath('目录1/目录2') #D:\blog\python_blog\目录操作\目录1\目录2
print(path)
path=os.path.abspath('D:/1-phython/python/目录1')
print(path) #D:\1-phython\python\目录1
#2、判断文件或目录是否存在
res=os.path.exists('目录4')
print(res) #False
res=os.path.exists('D:/1-phython/python/目录1')
print(res) #True
#3、将路径与文件名或目录名拼接起来
path='D:\\blog\\python_blog\\目录操作'
name='文档2.txt'
abs_path=os.path.join(path,name)
print(abs_path)
#4、分离文件名和后缀名
a=os.path.splitext('文档1.txt')
print(a)
#5、从路径中提取文件名或目录名(不包括路径)
dir_name=os.path.basename('D:\\blog\\python_blog\\目录操作')
file_name=os.path.basename('D:\\blog\\python_blog\\目录操作\\文档1.txt')
print(dir_name,file_name) #目录操作 文档1.txt
#6、从路径中提取路径(不包括文件名)
path=os.path.dirname('D:\\blog\\python_blog\\目录操作')
print(path) #D:\blog\python_blog
path=os.path.dirname('D:\\blog\\python_blog\\目录操作\\文档1.txt')
print(path) #D:\blog\python_blog\目录操作
#7、用于判断是否为路径
res1=os.path.isdir('D:\\blog\\python_blog\\目录操作')
res2=os.path.isdir('目录操作')
print(res1,res2) #True False