IO错误未处理,使用代码前请仔细看一下注释,避免造成不可挽回的损失
# 拷贝文件夹并保持目录结构
import shutil
import os
source = '源文件夹'
target = '目标文件夹'
count = 0 # 统计文件数量
def moveDir(src, dist):
global count
# 检查目标文件夹是否存在,不存在创建文件夹
if (not os.path.exists(dist)):
os.mkdir(dist)
# 首先遍历当前目录所有文件及文件夹
filelist = os.listdir(src)
# 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
for file in filelist:
# 获取当前文件或文件夹全路径
currentpath = os.path.join(src, file)
# 判断是否是文件夹
if os.path.isdir(currentpath):
# 继续遍历文件夹
moveDir(os.path.join(src, file), os.path.join(dist, file))
else:
# 移动或复制文件
count += 1
(filepath, filename) = os.path.split(currentpath)
# 拼接目标文件路径
targetpath = os.path.join(dist, file)
# 复制文件
# shutil.copy(currentpath, targetpath)
# 移动文件
os.rename(currentpath, targetpath) # shutil.move(scurrentpath, targetpath)
print(f'\r第{count}文件:{filename} 移动完成', end='')
if __name__ == '__main__':
source = input('请输入需要移动的文件夹:')
target = input('请输入需要移动到的位置:')
# 开始移动
print(f'开始移动文件夹!')
moveDir(source, target)
# 移动文件后留有空文件夹,需要主动删除
shutil.rmtree(source, ignore_errors=False, onerror=None)
print('')
print(f'文件夹移动完成:{source}->{target},共{count}个文件')