python批量修改文件名后缀
时间: 2025-01-02 21:28:22 浏览: 11
### 使用Python批量更改文件扩展名
为了实现批量修改文件后缀名的功能,可以利用Python中的`os`模块来操作文件系统。具体来说,通过遍历指定目录下的所有文件并逐一检查其后缀名来进行替换。
#### 方法一:基于 `os.listdir()` 和字符串处理
这种方法适用于简单的场景,即只需要改变特定目录内顶层文件的后缀而不涉及子目录的情况:
```python
import os
def change_extension_in_folder(folder_path, old_ext, new_ext):
for filename in os.listdir(folder_path): # 获取目标文件夹内的所有文件名
if not filename.endswith(old_ext): # 如果不是我们要找的那种类型的文件就跳过
continue
base = os.path.splitext(filename)[0] # 去掉旧的扩展名部分
new_name = f"{base}{new_ext}" # 添加新的扩展名
full_old_file = os.path.join(folder_path, filename)
full_new_file = os.path.join(folder_path, new_name)
try:
os.rename(full_old_file, full_new_file) # 尝试重命名文件
print(f'Successfully renamed "{filename}" to "{new_name}".')
except Exception as e:
print(f'Failed to rename "{filename}": {str(e)}')
change_extension_in_folder('your_directory', '.txt', '.md') # 修改 your_directory 路径以及所需转换前后缀
```
此方法仅限于同一层文件的操作,并且相对直观易懂[^1]。
#### 方法二:递归遍历整个目录结构(含子文件夹)
当需要更深入地访问包含多级嵌套子文件夹的大规模项目时,则应该考虑采用更为强大的工具如`os.walk()`. 这样不仅可以一次性完成大量文件的批量化更新,而且还能更好地控制程序逻辑:
```python
import os
def recursive_change_extensions(root_dir, old_ext, new_ext):
for root, dirs, files in os.walk(root_dir): # 遍历根目录及其所有的子目录
for file in files: # 对每一个找到的文件做进一步判断
if file.lower().endswith(old_ext.lower()): # 不区分大小写比较后缀名
filepath = os.path.join(root, file)
noext_filename = os.path.splitext(file)[0]
target_filepath = os.path.join(root, f'{noext_filename}{new_ext}')
try:
os.replace(filepath, target_filepath)
print(f'Renamed:\n{filepath}\nto\n{target_filepath}\n---')
except OSError as err:
print(f"Error renaming '{file}'\nDetails:{err}")
recursive_change_extensions('/path/to/parent/folder/', '.jpg', '.jpeg') # 设置参数以适应实际需求
```
上述代码片段展示了如何使用`os.walk()`函数迭代地查找并改写给定路径下所有符合条件的文件名称[^3].
阅读全文