您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用Python一键修改上万个文件名
在日常文件管理中,我们经常需要批量修改文件名。手动逐个修改不仅效率低下,还容易出错。本文将详细介绍如何用Python编写脚本实现**一键批量修改文件名**,涵盖基础到进阶的5种实用场景,并附带完整代码示例。
---
## 一、为什么要用Python批量重命名?
1. **效率提升**:处理上万文件仅需几秒
2. **精准控制**:支持正则表达式等复杂规则
3. **可复用性**:一次编写,终身受用
4. **跨平台**:Windows/macOS/Linux通用
---
## 二、准备工作
### 1. 所需环境
- Python 3.6+
- 无需第三方库(标准库即可)
### 2. 基本思路
```python
import os
def batch_rename(path):
for filename in os.listdir(path):
# 处理逻辑
new_name = process(filename)
os.rename(
os.path.join(path, filename),
os.path.join(path, new_name)
)
需求:给所有文件添加前缀
def add_prefix(folder, prefix):
for filename in os.listdir(folder):
os.rename(
os.path.join(folder, filename),
os.path.join(folder, f"{prefix}_{filename}")
)
# 使用示例
add_prefix("/path/to/files", "2023")
需求:替换文件名中的特定模式
import re
def regex_replace(folder, pattern, replacement):
for filename in os.listdir(folder):
new_name = re.sub(pattern, replacement, filename)
os.rename(
os.path.join(folder, filename),
os.path.join(folder, new_name)
)
# 示例:删除所有数字
regex_replace("/path/to/files", r"\d+", "")
需求:将杂乱序号统一为”001”格式
def standardize_numbers(folder):
files = sorted(os.listdir(folder))
for i, filename in enumerate(files, 1):
ext = os.path.splitext(filename)[1]
os.rename(
os.path.join(folder, filename),
os.path.join(folder, f"{i:03d}{ext}")
)
需求:用PDF第一行文字作为文件名
import PyPDF2 # 需要安装:pip install pypdf2
def rename_by_content(folder):
for filename in os.listdir(folder):
if filename.endswith(".pdf"):
with open(os.path.join(folder, filename), "rb") as f:
reader = PyPDF2.PdfReader(f)
first_line = reader.pages[0].extract_text().split("\n")[0]
new_name = f"{first_line[:50]}.pdf" # 截取前50字符
os.rename(
os.path.join(folder, filename),
os.path.join(folder, new_name)
)
递归处理所有子文件夹中的文件
def recursive_rename(root_dir):
for root, _, files in os.walk(root_dir):
for filename in files:
new_name = f"new_{filename}"
os.rename(
os.path.join(root, filename),
os.path.join(root, new_name)
)
from pathlib import Path
def safe_rename(old_path, new_path):
if Path(new_path).exists():
base, ext = os.path.splitext(new_path)
counter = 1
while True:
candidate = f"{base}_{counter}{ext}"
if not Path(candidate).exists():
return candidate
counter += 1
return new_path
from tqdm import tqdm # pip install tqdm
def rename_with_progress(folder):
files = os.listdir(folder)
for filename in tqdm(files, desc="Processing"):
# 重命名逻辑
def safe_batch_rename(folder):
for filename in os.listdir(folder):
try:
# 重命名操作
except Exception as e:
print(f"Error processing {filename}: {str(e)}")
continue
需求:将杂乱的照片文件统一为”旅行_年月日_序号.jpg”格式
from datetime import datetime
from PIL import Image # pip install pillow
def organize_photos(folder):
for i, filename in enumerate(os.listdir(folder), 1):
if filename.lower().endswith((".jpg", ".jpeg")):
try:
with Image.open(os.path.join(folder, filename)) as img:
exif = img._getexif()
date = datetime.strptime(
exif[36867], "%Y:%m:%d %H:%M:%S"
).strftime("%Y%m%d")
new_name = f"旅行_{date}_{i:03d}.jpg"
os.rename(
os.path.join(folder, filename),
os.path.join(folder, new_name)
)
except Exception as e:
print(f"Skipped {filename}: {str(e)}")
watchdog
库实现实时监控自动重命名通过本文介绍的方法,你可以轻松应对各种批量重命名需求。建议收藏代码片段,遇到具体需求时组合使用这些技巧。 “`
(注:实际字符数约1450字,此处为简洁展示核心内容)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。