shutile 模块提供了一系列对文件和文件集合的高阶操作,特别是提供了一些支持文件拷贝和删除的函数。
如有其他命令需要,可参见 Python 官网的相关文档:shutil 高阶文件操作 或调用 help(shutile) 命令获取帮助文档。
关于 os 模块的相关命令,可参考我的另一篇博客:Python系列 | os模块常用命令
示例:假设 C 盘存在两个文件夹 p_file
和 new_pfile
# input code
import os
os.chdir(r"C:\p_file")
print(os.getcwd())
print(os.listdir())
# output result
C:\p_file
["p_file's excel.xlsx", "p_file's text.txt", 'sub_file'] # p_file文件夹中存在一个txt文件、一个excel文件和一个名为sub_file的文件夹(sub_file文件夹内存在有文件和子文件夹)
1. shutil.copy
- shutile.copy(src, dst)
- 将文件 src 拷贝到文件或目录 dst
# input code
import shutil
shutil.copy(r".\p_file's text.txt",r"..\new_pfile")
# output result
"..\\new_pfile\\p_file's text.txt" # 已成功拷贝txt文件至new_pfile文件夹下
2. shutile.copy2
- shutile.copy2(src, dst)
- 类似于 copy() ,区别在于 copy2() 还会尝试保留文件的元数据
# input code
shutil.copy2(r".\p_file's excel.xlsx",r"..\new_pfile")
# output result
"..\\new_pfile\\p_file's excel.xlsx" # 已成功拷贝excel文件至new_pfile文件夹下
3. shutile.copytree
- shutil.copytree(src, dst)
- 递归地拷贝以 src 为根路径的整个目录树,返回目标目录 dst。 其中,名为 dst 的目标目录不必已存在,可被自动创建
# input code
print("sub_file中含有文件:{}".format(os.listdir(r'.\sub_file')))
shutil.copytree(r'.\sub_file',r'..\tree_file')
print("新创建的树目录tree_file中含有文件:{}".format(os.listdir(r'..\tree_file')))
# output result
sub_file中含有文件:['subsub_file', "sub_file's text.txt"]
新创建的树目录tree_file中含有文件:['subsub_file', "sub_file's text.txt"]
4. shutil.rmtree
- shutil.rmtree(path)
- 删除一个完整的 path 目录树
# input code
shutil.rmtree(r'..\tree_file') # 即使tree_file内含文件也会被删除,这点不同于os.rmdir或os.removedirs,os模块的两个删除函数只能删除空文件、空文件夹
print(os.listdir('..'))
# output result
['new_pfile','p_file'] # tree_file已被删除
5. shutil.move
- shutil.move(src, dst)
- 递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置(类似 windows 剪切操作)
# input code
shutil.move(r'..\new_pfile','.') # 将C盘的new_pfile文件夹移动至C盘的p_file文件夹中
print(os.listdir())
# output result
'.\\new_pfile'
['new_pfile', "p_file's excel.xlsx", "p_file's text.txt", 'sub_file'] # 以完成移动