Python 入门 29 —— 文件夹操作

文件夹,又称目录。关于目录操作的函数、对象等主要集中在三个标准库:os、os.path、shutil。

一、os 模块 ———— 基本操作

1、创建新目录

(1)os.mkdir(r’路径/目录名’)

创建指定的目录,无返回值,创建不成功则抛出异常。为了避免斜杠与反斜杠引起的麻烦,'路径/目录名’应该用原始字符串形式,即在前面加上r 或 R。例如:

import os
os.mkdir(r'C:/Users/Administrator/Desktop/测试目录')    # 创建目录:测试目录

os.mkdir(r'C:/Users/Administrator/Desktop/测试目录')    # FileExistsError: 已存在

(2)os.makedirs(r’路径/目录名’)

与 os.mkdir() 类似,也是创建目录,无返回值,但如果路径中的目录如果还不存在,则一并创建。例如:

import os

os.mkdir(r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc/dd')    # FileNotFoundError:找不到指定的路径

os.makedirs(r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc/dd')    # 创建目录:aa、bb、cc、dd

2、重命名和移动目录

os.rename(r’路径/旧目录名’,r’路径/新目录名’)

这个函数兼有重命名和移动的功能,无返回值,重命名或移动不成功则抛出异常。当前后路径一致时,进行“重命名”;当前后路径不一致时,进行“移动”。例如:

import os
os.replace(r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc/dd',r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc/newdd')    # dd 目录重命名为:newdd

os.replace(r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc',r'C:/Users/Administrator/Desktop/测试目录/aa/newcc')    # cc 目录被移动,且重命名为:newcc 

3、删除目录

os.rmdir(r’路径/目录名’)

删除指定的目录,无返回值,删除不成功则抛出异常。只能删除空目录,其中有子目录或文件的目录不能被删除。例如:

import os
os.rmdir(r'C:/Users/Administrator/Desktop/测试目录/aa/newcc/newdd')    # newdd 目录被删除

os.rmdir(r'C:/Users/Administrator/Desktop/测试目录/aa')    # OSError:[WinError 145] 目录不是空的

4、取目录中的所有内容

os.listdir(r’路径/目录名’)

返回一个列表,该列表包含了目录中的所有文件与目录的名称。例如:

import os
print(os.listdir(r'C:/Users/Administrator/Desktop/测试目录/aa'))
# ['aa-文件一.txt', 'aa-文件三.txt', 'aa-文件二.txt', 'aa-文件四.txt', 'bb', 'newcc']

5、取目录及其子目录中的所有内容

os.walk(r’路径/目录名’)

取目录、子目录、子子目录…中的所有内容,返回一个生成器对象。返回的生成器对象的元素为元组。

一个目录或子目录构成一个元组:(路径/目录,[子目录列表],[文件列表])。例如:

import os.path

t = os.walk(r'C:/Users/Administrator/Desktop/测试目录')
print(t)    # <generator object walk at 0x0000000002572900>

print([x for x in t])

# [('C:/Users/Administrator/Desktop/测试目录',
#     ['aa'],
#     []),
# ('C:/Users/Administrator/Desktop/测试目录\\aa',
#     ['bb', 'newcc'],
#     ['aa-文件一.txt', 'aa-文件三.txt', 'aa-文件二.txt', 'aa-文件四.txt']),
# ('C:/Users/Administrator/Desktop/测试目录\\aa\\bb',
#     [],
#     ['bb-文件一.txt', 'bb-文件三.txt', 'bb-文件二.txt', 'bb-文件四.txt']),
# ('C:/Users/Administrator/Desktop/测试目录\\aa\\newcc', 
#     ['dd'],
#     ['cc-文件一.txt', 'cc-文件三.txt', 'cc-文件二.txt', 'cc-文件四.txt']),
# ('C:/Users/Administrator/Desktop/测试目录\\aa\\newcc\\dd',
#     [],
#     ['dd-文件一.txt', 'dd-文件二.txt'])]

二、os.path 模块 ———— 路径操作

1、分隔路径和目录

os.path.split(r’路径/目录名’),返回组成的元组:(路径,目录名)。

os.path.dirname((r’路径/目录名’),返回路径。

os.path.basename((r’路径/目录名’),返回目录名。

例如:

import os.path

print(os.path.split(r'C:/Users/Administrator/Desktop/测试目录'))    # ('C:/Users/Administrator/Desktop', '测试目录')

print(os.path.dirname(r'C:/Users/Administrator/Desktop/测试目录'))    # C:/Users/Administrator/Desktop

print(os.path.basename(r'C:/Users/Administrator/Desktop/测试目录'))    # 测试目录

2、判断是否目录

os.path.isdir(r’路径’),是目录则返回True,不是目录或目录不存在返回False。例如:

import os.path

print(os.path.isdir(r'C:/Users/Administrator/Desktop/测试目录'))    # True
print(os.path.isdir(r'C:/Users/Administrator/Desktop/测试目录aaa'))    # False

3、连接多个路径

os.path.join(r’路径1’, r’路径2’, r’路径3’…),返回连接后的路径。例如:

import os.path
print(os.path.join(r'C:/Users',r'Administrator',r'Desktop/测试目录'))    # C:/Users\Administrator\Desktop/测试目录

三、shutil 模块(shell utility 的缩写,外壳实用程序) ———— 高级操作

1、递归复制目录

copytree(r’路径/旧目录名’,r’路径/新目录名’)

复制目录,返回“路径/新目录名”。例如:

import shutil
print(shutil.copytree(r'C:/Users/Administrator/Desktop/测试目录/aa/bb/cc',r'C:/Users/Administrator/Desktop/测试目录/aa/cc'))
# aa 中新增复制来的目录 cc :C:/Users/Administrator/Desktop/测试目录/aa/cc

2、递归删除目录

rmtree(r’路径/目录名’)

删除指定的目录,无返回值。

import shutil
shutil.rmtree(r'C:/Users/Administrator/Desktop/测试目录/aa/cc')    # cc 目录及其目录中的内容被删除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章