文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一行 Python 实现文件批量重命名的七种方法

2024-11-29 20:59

关注

首先,确保你的电脑上已经安装了Python,然后我们开始这场魔法之旅吧!

方法1: 简单替换法

假设我们要把所有“old_name”开头的文件改为“new_name”,看这行代码的魔力!

import os; [os.rename(f, f.replace('old_name', 'new_name')) for f in os.listdir('.') if f.startswith('old_name')]

解读时间 : 这行代码首先导入了os模块,然后用列表推导式遍历当前目录下的所有文件(.listdir('.')),检查文件名是否以“old_name”开始(if f.startswith('old_name')),如果是,就使用replace方法替换掉“old_name”为“new_name”。简单粗暴,一气呵成!

方法2: 序列号赋予师

如果你想要给文件加上连续的数字,比如“file_1”,“file_2”...

import os, itertools; [os.rename(f, f'file_{i}') for i, f in enumerate(os.listdir('.'), start=1)]

解密中 : enumerate函数是个好帮手,它给每个文件名配了个序号,从1开始(start=1),然后我们用这个序号和文件名结合,生成新的文件名。是不是很有条理?

方法3: 时间戳变形记

给文件加上时间戳,让重命名带有时间信息,非常适合日志文件管理。

import os, datetime; [os.rename(f, f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}_{f}") for f in os.listdir('.')]

魔法解析 : 使用datetime.now().strftime('%Y%m%d_%H%M%S')生成当前日期时间的字符串,然后拼接到原文件名前,这样每个文件都穿上了一件时间编码的外衣。

方法4: 扩展名专精者

有时候我们只想改动文件名,保留扩展名,这招搞定!

import os; [os.rename(f, f.stem+'_modified'+f.suffix) for f in os.scandir('.') if f.is_file()]

技术揭秘 : f.stem获取文件名不包括扩展名的部分,f.suffix则是扩展名,这行代码就是在文件名后加了个"_modified"。

方法5: 模式匹配大师

正则表达式的舞台,灵活匹配并重命名。

import os, re; [os.rename(f, re.sub(r'pattern', 'replacement', f)) for f in os.listdir('.') if re.match(r'pattern', f)]

高手进阶 : 这里r'pattern'是你想匹配的模式,'replacement'是替换后的文本。比如,如果你想把所有包含“example”的文件名中的“example”换成“sample”,只需调整这两个参数即可。

方法6: 数字排序狂人

如果你的文件名是乱序的数字,比如“file1”,“file10”,想按数字排序重命名,这招超有用!

import os; files = sorted(os.listdir('.'), key=lambda x: int(x.split('.')[0])) 
for i, f in enumerate(files, start=1): os.rename(f, f'file{i}')

排序秘籍 : 先用sorted和lambda函数按文件名中的数字排序,然后重新命名,保证了按数字顺序排列。

方法7: 高级模板巫师

使用str.format或f-string(Python 3.6+)来创建更复杂的命名规则。

import os; [os.rename(f, f'File-{i:03d}_{f}') for i, f in enumerate(sorted(os.listdir()), start=1)]

魔法公式 : 这里展示了如何使用f-string和格式化来创建带有前缀“File-”,后面跟着三位数字编号和原文件名的格式。{i:03d}确保编号始终是三位,不足的前面补零。

怎么样,是不是觉得Python在文件管理上也变得异常有趣?

进一步拓展

扩展讨论:安全与异常处理

在批量重命名时,有几个关键点需要注意,以确保操作的安全性和稳定性:

1. 避免重名冲突

在进行重命名时,要确保新名字不会导致同名文件冲突,否则会覆盖原有文件,造成数据丢失。可以通过先检查目标文件名是否存在来避免这种情况。

2. 异常处理

在代码中加入异常处理逻辑,可以让你的脚本更加健壮。例如,当文件正在被使用,或没有读写权限时,可能会抛出异常。

import os
try:
    for i, f in enumerate(sorted(os.listdir()), start=1):
        new_name = f'File-{i:03d}_{f}'
        if new_name != f:  # 避免不必要的重命名
            os.rename(f, new_name)
except OSError as e:
    print(f"Error: {e.strerror}")

3. 备份策略

在执行大规模重命名之前,尤其是对重要文件进行操作时,创建备份是一个好习惯。这样即使出了错,也有恢复的余地。

4. 批量重命名工具函数

为了重复利用这些逻辑,可以将重命名的逻辑封装成一个函数,便于在不同场景下调用。

def rename_files(pattern, replacement, directory='.'):
    import os, re
    for filename in os.listdir(directory):
        if re.search(pattern, filename):
            new_filename = re.sub(pattern, replacement, filename)
            os.rename(os.path.join(directory, filename), os.path.join(directory, new_filename))
    print("Renaming completed.")

# 示例调用
rename_files(r'old_pattern', 'new_pattern')

实践建议

通过这些扩展讨论,你不仅学会了如何用一行代码实现文件批量重命名,还了解了如何使你的代码更加健壮和实用。希望这些知识能帮助你在未来的编程旅程中更加游刃有余!

来源:手把手PythonAI编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯