Python批量移动文件可通过多种方式实现,以下是核心方法及示例代码:
一、基础批量移动方法
使用os
模块的os.listdir()
结合循环遍历文件,再通过shutil.move()
完成移动操作。
示例代码 :
import os
import shutil
# 源文件夹路径
source_folder = 'path/to/source/folder'
# 目标文件夹路径
target_folder = 'path/to/target/folder'
# 获取源文件夹所有文件
files = os.listdir(source_folder)
for filename in files:
source_file = os.path.join(source_folder, filename)
# 移动文件到目标文件夹
shutil.move(source_file, target_folder)
二、递归遍历文件夹移动文件
使用os.walk()
递归遍历源文件夹及其子文件夹,筛选指定文件类型后移动。
示例代码 :
import os
import shutil
def move_files(source_dir, target_dir, extensions=['xls', 'xlsx', 'csv']):
for root, dirs, files in os.walk(source_dir, topdown=False):
for file in files:
if file.endswith(extensions):
old_path = os.path.join(root, file)
new_path = os.path.join(target_dir, file)
shutil.move(old_path, new_path)
print(f"Moved: {old_path} to {new_path}")
# 调用函数
move_files('path/to/source', 'path/to/target', extensions=['xls', 'xlsx'])
三、重命名后移动文件
在移动前对文件重命名(如添加序号或日期),使用os.path.splitext()
分割文件名并拼接新名称。
示例代码 :
import os
import shutil
import datetime
def rename_and_move(source_dir, target_dir, extensions=['pdf']):
for root, dirs, files in os.walk(source_dir, topdown=False):
for file in files:
if file.endswith(extensions):
old_path = os.path.join(root, file)
# 生成新文件名(如:1-终稿-xxxxx)
now = datetime.datetime.now()
new_name = f"{file.split('.')}-{now.strftime('%Y%m%d%H%M')} {file.split('.')}"
new_path = os.path.join(target_dir, new_name)
shutil.move(old_path, new_path)
print(f"Moved and renamed: {old_path} to {new_path}")
# 调用函数
rename_and_move('path/to/source', 'path/to/target', extensions=['pdf'])
四、按文件夹分类移动
根据文件类型或所属文件夹将文件分类移动到对应目录,例如将桌面图片分类到“图片”文件夹。
示例代码 :
import os
import shutil
desktop_path = os.path.expanduser("~/Desktop")
folders = ["图片", "文档", "视频"]
for folder in folders:
folder_path = os.path.join(desktop_path, folder)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
for file in os.listdir(desktop_path):
if file.lower().endswith(('.png', '.jpg', '.gif')):
shutil.move(os.path.join(desktop_path, file), folder_path)
print(f"Moved image {file} to {folder_path}")
注意事项 :
-
操作前建议备份重要文件,避免误删;
-
使用绝对路径可避免路径错误,推荐结合
os.path.join()
拼接路径;