python对多个文件统一重命名删除名中部分字符

python对多个文件统一重命名删除名中部分字符

**

因为有的时候网上找到的压缩包解压后的文件很乱,文件名太长,多了很多不需要的字,不方便查看,
出于想快捷删除文件名中部分字的简单需求,很久前编写了以下程序,今天简单记录一下。
——2022-8-15

1. 最初的需求:

只是要删除多个文件中的指定的某组字

import os
import re
path = r'C:\Users\jellyfish\Downloads\train\考研英语一'
files = os.listdir(path)
i = 0
for file in files:
	pattern = '考研英语'
    oldname = path + '\\' + files[i]
    newname = path +'\\' +files[i].replace(pattern,'')
    os.rename(oldname,newname)
    i += 1

在这里插入图片描述
结果:
在这里插入图片描述

2. 第二次的需求:

用正则匹配删去一些不是统一拥有的某组字。
有些文件中有01、02这些排序,但我不需要。

pattern =re.compile('\w+、')
for file in files:
    oldname = path + '\\' + file
    rename = re.sub(pattern,"",file)
    newname = path + '\\' + rename
    os.rename(oldname,newname)

#简便点
for file in files:
    newname = re.sub(pattern,"",file)
    os.rename(os.path.join(path,file),os.path.join(path,newname))

print("————————END————————————")

结果:
在这里插入图片描述

题外话

运用正则匹配的时候,一开始想的是

for file in files:
    oldname = path + '\\' + file
    pattern =re.compile('\w+、')
    text = re.findall('\w+、',oldname)
    newname = path + '\\' + file.replace(text,'')
    os.rename(oldname,newname)

问题除了繁琐外还有findall返回的是list类型,而replace要str
在这里插入图片描述
以及,强制将text转换为str时是['03、’],而我需要的是’03、’。list转换为str不强行转换,用"".join()
详细可见

https://www.cnblogs.com/sench/p/8718008.html#:~:text=python%E4%B8%ADlist%E5%92%8Cstr%E4%BA%92%E8%BD%AC%201%E3%80%81list%E8%BD%ACstr%20%E5%81%87%E8%AE%BE%E6%9C%89%E4%B8%80%E4%B8%AA%E5%90%8D%E4%B8%BAtest_list%E7%9A%84list%EF%BC%8C%E8%BD%AC%E6%8D%A2%E5%90%8E%E7%9A%84str%E5%90%8D%E4%B8%BAtest_str%20%E5%88%99%E8%BD%AC%E6%8D%A2%E6%96%B9%E6%B3%95%EF%BC%9A%20test_str%20%3D%20%22%22.join%20%28test_list%29,2%E3%80%81str%E8%BD%AClist%20%E5%81%87%E8%AE%BE%E6%9C%89%E4%B8%80%E4%B8%AA%E5%90%8D%E4%B8%BAtest_str%E7%9A%84str%EF%BC%8C%E8%BD%AC%E6%8D%A2%E5%90%8E%E7%9A%84list%E5%90%8D%E4%B8%BAtest_list%20%E5%88%99%E8%BD%AC%E6%8D%A2%E6%96%B9%E6%B3%95%EF%BC%9A%20test_list%3Dlist%20%28test_str%29%20%E4%BE%8B%E5%AD%90%EF%BC%9A%20%E6%9C%AC%E7%AB%99%E4%BD%BF%E7%94%A8%E3%80%8CCC%20BY-NC-SA%E3%80%8D%E5%88%9B%E4%BD%9C%E5%85%B1%E4%BA%AB%E5%8D%8F%E8%AE%AE%EF%BC%8C%E8%BD%AC%E8%BD%BD%E8%AF%B7%E5%9C%A8%E6%96%87%E7%AB%A0%E6%98%8E%E6%98%BE%E4%BD%8D%E7%BD%AE%E6%B3%A8%E6%98%8E%E4%BD%9C%E8%80%85%E5%8F%8A%E5%87%BA%E5%A4%84%E3%80%82

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,你可以使用Python的os模块和datetime模块来实现文件批量重命名。 下面是一个简单的示例代码,实现了你的要求: ```python import os from datetime import datetime import random import string def batch_rename_files(folder_path, random_string_length=0): """ 批量重命名文件,名字改为该文件的创建或修改日期,如果有重名的文件,可以添加一个随机字符串 :param folder_path: 文件夹路径 :param random_string_length: 随机字符串长度,默认为0 """ for filename in os.listdir(folder_path): # 获取文件的创建时间或修改时间 full_path = os.path.join(folder_path, filename) if os.path.isfile(full_path): timestamp = os.path.getmtime(full_path) else: continue # 格式化时间 date_time = datetime.fromtimestamp(timestamp) new_name = date_time.strftime("%Y-%m-%d %H-%M-%S") # 添加随机字符串 if random_string_length > 0: random_string = ''.join(random.choices(string.ascii_lowercase + string.digits, k=random_string_length)) new_name += '-' + random_string # 拼接新的文件名 file_extension = os.path.splitext(filename)[1] new_filename = new_name + file_extension new_full_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(full_path, new_full_path) if __name__ == '__main__': folder_path = 'your_folder_path' batch_rename_files(folder_path, random_string_length=5) ``` 你只需要将 `your_folder_path` 替换成你想要重命名文件文件夹路径,然后运行这个 Python 脚本即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值