使用场景:当批量产出同一类型的文件时,可以使用如下代码将所有文件移动到目标目录,并打包成压缩包:
import shutil
import glob
import os
# ===========================================================================
def remover(path):
""" param <path> could either be relative or absolute. """
if os.path.isfile(path) or os.path.islink(path):
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
raise ValueError("file {} is not a file or dir.".format(path))
# ===========================================================================
output_folder_name = 'folder_name'
copy = False
over_write_folder = True
# ===========================================================================
if os.path.exists(output_folder_name) and over_write_folder:
remover(output_folder_name)
if not os.path.exists(output_folder_name):
# 开文件夹
os.makedirs(output_folder_name)
# Copy 当前目录下的目标文件
file_names = glob.glob("*.png") + glob.glob("*.xlsx")
for file_name in file_names:
if copy:
shutil.copy(os.path.join('.', file_name), output_folder_name)
else:
shutil.move(os.path.join('.', file_name), output_folder_name)
shutil.make_archive(f'{
output_folder_name}', 'zip', output_folder_name)
else:
print("改一下output_folder_name哈!")
知识点积累:
shutil模块
:st+util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。shutil.rmtree
:删除目录/文件夹;shutil.move(source,destination)
:移动文件,source是文件,destination可以是文件也可以是目录;shutil.copy(source,destination)
:拷贝文件,source是文件,destination可以是文件也可以是目录;shutil.make_archive(base_name, format, base_dir)
:base_name是创建的目标文件名,format是压缩包格式后缀:zip、tar、bztar、gztar,base_dir是开始打包的路径;
glob模块
:可根据 Unix 终端所用规则找出所有匹配特定模式的路径名,但会按不确定的顺序返回结果。glob.glob(reg)
:reg为正则表达式,可以直接按文件类型筛选,返回list;
os模块
:包含普遍的操作系统功能。os.path.isfile(path)
:判断path是否为文件;os.path.islink(path)
:判断path是否为快捷方式;os.path.isdir(path)
:判断path是否为目录;os.path.exists(path)
:判断path是否存在;os.path.join(pa,pb,pc)
:连接规则参考https://blog.csdn.net/qq_30815237/article/details/87903364;os.remove(path)
:删除文件;os.makedirs(folder_name)
:在当前目录下创建文件夹/子目录;