目录和文件的操作,需要引入 os 模块:
import os
目录 directory ,简写 dir ,简单来说就是文件夹。
使用 os.mkdir( ) 函数创建目录(创建一级目录)。
使用 os.makedirs()函数创建多级目录(目录下面还有目录)。
原型如下所示:
os.mkdir( path ) # mk 就是 make
os.makedirs( path ) # 居然不是 mkdirs,我觉得这个名字太不科学了,增加了记忆数量。
参数path 为要创建目录(文件夹)的路径。
os.mkdir('d:\hello') # D盘下创建hello的目录
os.mkdir("hello") # 跟python文件同级的目录
os.makedirs('d:\\books\\book') # 字符串中的 \ 具有转义的功能,所以表示普通的 \ ,需要 \\
os.makedirs( r"d:\books\book" ) # 字符串前面加个 r,就不会转义了。
os.makedirs( r"books\book" ) # 跟 python 文件同级的文件夹
但是,如果文件夹已经存在,再创建相同目录,就会报错。
所以,一般在创建目录之前,要做一个判断,看路径是否存在(多级目录判断方式一样)。
isExist = os.path.exists( r"ss\abc" ) # 文件夹存在与否
if not isExist: # 如果不存在文件夹
os.makedirs(r"ss\abc") # 创建目录
os.path.exists( x ) 可以判断文件或者文件夹是否存在。是,True;不是,False。
删除 remove,简写 rm。
os.rmdir( ) 删除目录。
os.removedirs( ) 函数删除多级目录
和创建目录函数对比,发现多级目录 make 和 remove 写的是完整单词。
原型如下:
os.rmdir( path ) # 删除单级目录
os.removedirs( path ) # 删除多级目录
参数path 为要删除的目录(文件夹)路径。
os.rmdir('d:\ss') # 删除 d 盘下的 ss 目录
os.rmdir('ss') # 删除 python 文件同级的 ss 目录
os.removedirs('d:\\ss\\abd') # 删除多级目录
os.removedirs( r"ss\abd")
注意:要删除的目录必须是空目录!所以,在删除目录之前,一定要清空目录里的内容。有一个文件或者文件夹都不行。
使用 os.remove( ) 函数删除一个文件。不能是多个文件。
os.remove( r"ss\abc\test.txt") # 删除 ss\abc 目录下的 test.txt 文件
使用 os.walk( ) 函数遍历目录。
其原型如下:
os.walk( path )
其参数path 为要遍历的目录。
返回一个对象,它的每个部分都是一个三元组 ( '目录x',[目录x下的目录list],目录x下面的文件 ) 。
mulu = os.walk( "ss" ) # 遍历跟 python 文件同级的 ss 文件夹。其结构如下图。
for item in mulu:
print( item )
('ss', ['abc'], [])
('ss\\abc', ['11', '22', '33'], ['abc1.txt', 'abc2.txt', 'abc3.txt'])
('ss\\abc\\11', [], ['py1.txt', 'py2.txt', 'py3.txt'])
('ss\\abc\\22', [], [])
('ss\\abc\\33', [], [])
输出的目录结构,从上到下,一层一层的输出,直到底层。
os.path.isdir( path ) 函数判断某一路径是否为目录。是,True;不是,False。
os.path.isfile( path ) 函数判断某一路径是否为文件。是,True;不是,False。
删除目录下所有的文件,含子目录的文件
mulu = os.walk( "ss" )
for item in mulu:
for file in item[2]:
print( item[0]+"\\"+file )
os.remove( item[0]+"\\"+file )
删除某个目录,该目录不为空,有子文件夹和文件。如图所示:
def delFolder(targetDir):
fList = os.walk(targetDir)
dirs = [] # 文件夹目录 lsit
for item in fList :
print(item)
for file in item[2]: # 遍历元素2 文件list
os.remove(item[0]+"\\"+file) # 删除文件
dirs.append(item[0]) # 从上到下依次把文件夹目录放进list中
dirs = dirs[::-1] # 逆向文件夹路径,从下到上
for itemDir in dirs: # 从下到上,依次删除目录
os.rmdir(itemDir)
delFolder("test")