本文目录导读:

我来帮你编写一个文件整理脚本,这是一个非常实用的自动化工具,可以帮你按类型、日期等规则整理文件。
基础功能版:按文件类型整理
import os
import shutil
from pathlib import Path
def organize_files_by_type(folder_path):
"""
按文件类型整理文件夹
"""
# 文件类型分类规则
file_types = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.webp'],
'文档': ['.doc', '.docx', '.pdf', '.txt', '.xlsx', '.pptx', '.md'],
'视频': ['.mp4', '.avi', '.mov', '.mkv', '.wmv', '.flv'],
'音频': ['.mp3', '.wav', '.flac', '.aac', '.ogg'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'程序': ['.exe', '.msi', '.apk', '.dmg'],
'代码': ['.py', '.js', '.html', '.css', '.java', '.cpp', '.h'],
}
folder = Path(folder_path)
# 遍历文件夹中的所有文件
for file in folder.iterdir():
if file.is_file():
# 获取文件扩展名
ext = file.suffix.lower()
# 查找对应的分类
moved = False
for category, extensions in file_types.items():
if ext in extensions:
# 创建目标文件夹
target_folder = folder / category
target_folder.mkdir(exist_ok=True)
# 移动文件
target_path = target_folder / file.name
shutil.move(str(file), str(target_path))
print(f'已移动: {file.name} -> {category}')
moved = True
break
# 如果文件类型未识别,放入"其他"文件夹
if not moved:
other_folder = folder / '其他'
other_folder.mkdir(exist_ok=True)
shutil.move(str(file), str(other_folder / file.name))
print(f'已移动: {file.name} -> 其他')
if __name__ == '__main__':
# 使用示例:整理当前目录
organize_files_by_type('./')
进阶版:按日期整理
import os
import shutil
from datetime import datetime
from pathlib import Path
def organize_by_date(folder_path):
"""
按文件创建日期整理文件
"""
folder = Path(folder_path)
for file in folder.iterdir():
if file.is_file():
# 获取文件修改时间
timestamp = os.path.getmtime(file)
file_date = datetime.fromtimestamp(timestamp)
# 创建日期文件夹 (年-月)
date_folder = folder / file_date.strftime('%Y-%m')
date_folder.mkdir(exist_ok=True)
# 移动文件
target_path = date_folder / file.name
# 处理文件名冲突
counter = 1
while target_path.exists():
name = file.stem
ext = file.suffix
target_path = date_folder / f'{name}_{counter}{ext}'
counter += 1
shutil.move(str(file), str(target_path))
print(f'已移动: {file.name} -> {date_folder.name}')
# 使用示例
# organize_by_date('./')
完整功能版:带文件过滤和日志
import os
import shutil
import logging
from pathlib import Path
from datetime import datetime
import argparse
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('file_organizer.log'),
logging.StreamHandler()
]
)
class FileOrganizer:
def __init__(self, folder_path, dry_run=False):
self.folder = Path(folder_path)
self.dry_run = dry_run
self.stats = {'moved': 0, 'skipped': 0, 'errors': 0}
# 文件类型配置
self.file_types = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.webp'],
'文档': ['.doc', '.docx', '.pdf', '.txt', '.xlsx', '.pptx', '.md'],
'视频': ['.mp4', '.avi', '.mov', '.mkv', '.wmv', '.flv'],
'音频': ['.mp3', '.wav', '.flac', '.aac', '.ogg'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'程序': ['.exe', '.msi', '.apk', '.dmg'],
'代码': ['.py', '.js', '.html', '.css', '.java', '.cpp', '.h'],
'数据': ['.csv', '.json', '.xml', '.yaml', '.yml'],
}
def organize_by_type(self):
"""按类型整理文件"""
logging.info(f"开始按类型整理文件夹: {self.folder}")
for file in self.folder.iterdir():
if not file.is_file():
continue
try:
ext = file.suffix.lower()
target_category = self._find_category(ext)
if target_category:
self._move_file(file, target_category)
else:
self._move_file(file, '其他')
except Exception as e:
logging.error(f"处理文件 {file.name} 时出错: {str(e)}")
self.stats['errors'] += 1
self._print_stats()
def organize_by_date(self):
"""按日期整理文件"""
logging.info(f"开始按日期整理文件夹: {self.folder}")
for file in self.folder.iterdir():
if not file.is_file():
continue
try:
timestamp = os.path.getmtime(file)
file_date = datetime.fromtimestamp(timestamp)
date_folder = file_date.strftime('%Y-%m')
self._move_file(file, date_folder)
except Exception as e:
logging.error(f"处理文件 {file.name} 时出错: {str(e)}")
self.stats['errors'] += 1
self._print_stats()
def _find_category(self, ext):
"""查找文件扩展名对应的类别"""
for category, extensions in self.file_types.items():
if ext in extensions:
return category
return None
def _move_file(self, file, target_folder_name):
"""移动文件到目标文件夹"""
target_folder = self.folder / target_folder_name
target_path = target_folder / file.name
# 处理文件名冲突
counter = 1
while target_path.exists():
name = file.stem
ext = file.suffix
target_path = target_folder / f'{name}_{counter}{ext}'
counter += 1
if self.dry_run:
logging.info(f"[模拟] 将移动: {file.name} -> {target_folder_name}")
else:
target_folder.mkdir(exist_ok=True)
shutil.move(str(file), str(target_path))
logging.info(f"已移动: {file.name} -> {target_folder_name}")
self.stats['moved'] += 1
def _print_stats(self):
"""打印统计信息"""
logging.info(f"整理完成! 统计: 移动 {self.stats['moved']} 个文件, "
f"跳过 {self.stats['skipped']} 个, "
f"错误 {self.stats['errors']} 个")
def main():
parser = argparse.ArgumentParser(description='文件整理工具')
parser.add_argument('path', nargs='?', default='.',
help='要整理的文件夹路径')
parser.add_argument('--type', action='store_true',
help='按文件类型整理')
parser.add_argument('--date', action='store_true',
help='按日期整理')
parser.add_argument('--dry-run', action='store_true',
help='模拟运行,不实际移动文件')
args = parser.parse_args()
# 创建整理器并执行
organizer = FileOrganizer(args.path, args.dry_run)
if args.type:
organizer.organize_by_type()
elif args.date:
organizer.organize_by_date()
else:
# 默认按类型整理
organizer.organize_by_type()
if __name__ == '__main__':
main()
使用示例
# 基本用法 - 按类型整理当前目录 python file_organizer.py # 按类型整理指定目录 python file_organizer.py /path/to/folder --type # 按日期整理 python file_organizer.py /path/to/folder --date # 先模拟运行,查看结果 python file_organizer.py /path/to/folder --type --dry-run
实用提示
- 先备份:运行整理脚本前,确保重要文件已备份
- 测试运行:先用
--dry-run参数查看即将执行的操作 - 自定义规则:可以根据需要修改
file_types字典来添加新的文件类型分类 - 日志查看:查看
file_organizer.log了解详细的操作记录
这个脚本可以帮助你快速整理杂乱的下载文件夹、桌面或其他目录,需要我添加其他功能吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播