Python 多功能文件处理工具
·
Python 多功能文件处理工具
本脚本是一个功能强大的命令行工具,支持以下功能:
- 批量重命名文件(支持正则表达式替换、序号追加等)
- 图片格式批量转换(如 PNG → JPG,支持质量压缩)
- 文件哈希值计算(支持 MD5、SHA1、SHA256)
- 多线程处理,提升大文件处理效率
文件结构
file-processor/
├── file_processor.py # 主程序入口
├── utils/
│ ├── hash_utils.py # 哈希计算工具
│ ├── image_utils.py # 图片处理工具
│ └── rename_utils.py # 文件重命名工具
└── README.md # 说明文档
代码实现
file_processor.py
import os
import argparse
from concurrent.futures import ThreadPoolExecutor
from utils.hash_utils import compute_file_hash
from utils.image_utils import convert_image
from utils.rename_utils import batch_rename_files
def main():
parser = argparse.ArgumentParser(description="多功能文件处理工具")
subparsers = parser.add_subparsers(dest='command', required=True)
# 重命名子命令
rename_parser = subparsers.add_parser('rename', help='批量重命名文件')
rename_parser.add_argument('--path', required=True, help='目标文件夹路径')
rename_parser.add_argument('--pattern', help='正则表达式匹配模式')
rename_parser.add_argument('--replacement', help='替换内容')
rename_parser.add_argument('--prefix', help='文件名前缀')
rename_parser.add_argument('--start', type=int, default=1, help='起始序号')
# 图片转换子命令
convert_parser = subparsers.add_parser('convert', help='图片格式转换')
convert_parser.add_argument('--path', required=True, help='目标文件夹路径')
convert_parser.add_argument('--from_ext', required=True, help='原扩展名,如 png')
convert_parser.add_argument('--to_ext', required=True, help='目标扩展名,如 jpg')
convert_parser.add_argument('--quality', type=int, default=85, help='压缩质量(仅对 jpg 有效)')
# 哈希计算子命令
hash_parser = subparsers.add_parser('hash', help='计算文件哈希值')
hash_parser.add_argument('--path', required=True, help='目标文件或文件夹路径')
hash_parser.add_argument('--algo', default='md5', choices=['md5', 'sha1', 'sha256'], help='哈希算法')
args = parser.parse_args()
if args.command == 'rename':
batch_rename_files(args.path, args.pattern, args.replacement, args.prefix, args.start)
elif args.command == 'convert':
with ThreadPoolExecutor() as executor:
for filename in os.listdir(args.path):
if filename.endswith(f'.{args.from_ext}'):
executor.submit(convert_image, os.path.join(args.path, filename), args.to_ext, args.quality)
elif args.command == 'hash':
if os.path.isfile(args.path):
print(f"{args.algo.upper()}: {compute_file_hash(args.path, args.algo)}")
elif os.path.isdir(args.path):
for filename in os.listdir(args.path):
filepath = os.path.join(args.path, filename)
if os.path.isfile(filepath):
print(f"{filename}: {compute_file_hash(filepath, args.algo)}")
if __name__ == '__main__':
main()
utils/hash_utils.py
import hashlib
def compute_file_hash(filepath, algorithm='md5'):
hash_func = hashlib.new(algorithm)
with open(filepath, 'rb') as f:
while chunk := f.read(8192):
hash_func.update(chunk)
return hash_func.hexdigest()
utils/image_utils.py
from PIL import Image
def convert_image(image_path, target_format='jpg', quality=85):
try:
img = Image.open(image_path)
rgb_img = img.convert('RGB')
new_path = image_path.rsplit('.', 1)[0] + f'.{target_format}'
rgb_img.save(new_path, format=target_format, quality=quality)
print(f"Converted: {image_path} → {new_path}")
except Exception as e:
print(f"Failed to convert {image_path}: {e}")
utils/rename_utils.py
import os
import re
def batch_rename_files(dir_path, pattern=None, replacement=None, prefix=None, start=1):
files = sorted(os.listdir(dir_path))
for filename in files:
old_path = os.path.join(dir_path, filename)
if not os.path.isfile(old_path):
continue
name, ext = os.path.splitext(filename)
if pattern:
name = re.sub(pattern, replacement, name)
if prefix:
name = f"{prefix}_{start}"
start += 1
new_name = f"{name}{ext}"
new_path = os.path.join(dir_path, new_name)
os.rename(old_path, new_path)
print(f"Renamed: {filename} → {new_name}")
使用示例
1. 批量重命名文件
python file_processor.py rename --path ./images --pattern "(.+)" --replacement "photo_\1" --prefix "IMG"
2. 图片格式转换
python file_processor.py convert --path ./images --from_ext png --to_ext jpg --quality 90
3. 计算文件哈希
python file_processor.py hash --path ./images/sample.jpg --algo sha256
技术实现
- 使用
argparse构建命令行界面 - 使用
concurrent.futures.ThreadPoolExecutor实现多线程任务 - 使用
Pillow库进行图片处理 - 使用
hashlib进行文件哈希计算 - 模块化设计,便于扩展与维护
注意事项
- 图片转换仅支持常见格式(如 PNG、JPG、WEBP)
- 哈希计算适合用于文件校验或去重
- 重命名操作不可逆,建议先备份
- 多线程处理时注意资源占用情况
更多推荐


所有评论(0)