Python 批量自动修改文件名,按指定的格式自动命名

目录

问题引入:

OS库的方法:

只通过OS来批量修改文件名:

通过cv2库进行批量修改文件名

常见问题:

①读取不到图片,路径全部修改为英文再尝试。

②运行了一会后报错,可能其文件格式不一致,即使它显示的是jpg,这时可以自主添加try,except,跳过本文件,继续修改下一个文件名。


问题引入:

在我们在对一个已经排好序的项目进行增删改之后,文件名可能不再连续,有所缺失,这时我们需要对所有文件进行有序的排序,需要借助Python来进行自动获取所有文件的数量然后自动进行排序。

例如我对某个文件进行删除后,图片的命名已经不连续了,需要对其后面的需要按顺序进行排列 。

再运行完os库的代码后,文件名已经变成连续的了。如下图:

OS库的方法:

os.listdir(path)--查看路径下的所有文件

os.rename(旧文件名,新文件名)--用于更改文件名字

os.mkdir(path)-在path路径下创建目录

os.remove(path)--删除文件

os.stat(path)--获取文件信息,存储的内存大小

只通过OS来批量修改文件名:

def File_name_sorting(filepath,outpath):
    import os
    alldates=os.listdir(filepath) #获得路径中的所有文件
    alldates.sort(key=lambda X : int(X[:-4])) #将文件名按照数字排序;X[:-4]是取.jpg前面的文件名 作用是屏蔽后缀名.jpg
    for i in range(1,len(alldates)+1):
        filepath=filepath+r'/'#读入文件的路径
        os.rename(filepath+str(alldates[i-1]),outpath+str(i)+'.jpg')

if __name__ == '__main__':
    filepath=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\img2'#需要重命名的路径
    outpath=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\img/'#导出的路径
    File_name_sorting(filepath,outpath)

通过cv2库进行批量修改文件名

cv.imwrite(path,file)把每一个文件取出后再通过此函数,保存至新的文件名,通过在其外层添加循环以此来达到批量修改文件名的效果。

代码如下:

def renamefile_cv(path,imgPath):
    import cv2
    import os
    file_lst = os.listdir(path)
    frame_count=0 #起始的文件名名字 后续加了1 所以这里设置为0
    for filename in file_lst:
        frame_count=frame_count+1
        frame=cv2.imread(path + filename)
        print('正在处理第'+ str(frame_count) + '张图片')
        cv2.imwrite(imgPath + str(frame_count)+'.jpg', frame)
if __name__ == '__main__':
    path=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\img/'
    imgPath=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\imges/'
    renamefile_cv(path,imgPath)

常见问题:

①读取不到图片,路径全部修改为英文再尝试。

②运行了一会后报错,可能其文件格式不一致,即使它显示的是jpg,这时可以自主添加try,except,跳过本文件,继续修改下一个文件名。

 下面是升级后的代码:

def renamefile_cv(path,imgPath):
    import cv2
    import os
    file_lst = os.listdir(path)
    frame_count=0 #起始的文件名名字 后续加了1 所以这里设置为0
    for filename in file_lst:
        frame_count=frame_count+1
        try:
            frame=cv2.imread(path + filename)
            print('正在处理第'+ str(frame_count) + '张图片')
            cv2.imwrite(imgPath + str(frame_count)+'.jpg', frame)
        except:
            print("{}存在问题".format(filename))
            pass
if __name__ == '__main__':
    path=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\img/'
    imgPath=r'E:\项目\python项目\爬虫\ebird\Larus ridibundus\imges/'
    renamefile_cv(path,imgPath)

如果存在问题,请各位大佬批评指正!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
批量修改文件名命名,你可以使用Python来实现。有多种方法可以实现这个功能,比如使用字符串切片、正则表达式等。下面是其中几种方法的示例代码: 方法一:使用字符串切片 ```python import os # 设置文件夹路径 folder_path = "C:\\Users\\Administrator\\Desktop\\123" # 获取文件列表 file_list = os.listdir(folder_path) # 遍历文件列表 for file_name in file_list: # 切片获取新的文件名 new_file_name = file_name.split('_')[-1] # 构建新的文件路径 new_file_path = os.path.join(folder_path, new_file_name) # 重命名文件 os.rename(os.path.join(folder_path, file_name), new_file_path) print("文件名修改完成") ``` 方法二:使用正则表达式 ```python import os import re # 设置文件夹路径 folder_path = "C:\\Users\\Administrator\\Desktop\\123" # 获取文件列表 file_list = os.listdir(folder_path) # 编译正则表达式 pattern = re.compile(r"\w+_(\w+)") # 遍历文件列表 for file_name in file_list: # 使用正则表达式匹配获取新的文件名 match = pattern.search(file_name) new_file_name = match.group(1) # 构建新的文件路径 new_file_path = os.path.join(folder_path, new_file_name) # 重命名文件 os.rename(os.path.join(folder_path, file_name), new_file_path) print("文件名修改完成") ``` 方法三:使用字符串替换 ```python import os # 设置文件夹路径 folder_path = "C:\\Users\\Administrator\\Desktop\\123" # 获取文件列表 file_list = os.listdir(folder_path) # 遍历文件列表 for file_name in file_list: # 使用字符串替换获取新的文件名 new_file_name = file_name.replace("微信名_时间_", "") # 构建新的文件路径 new_file_path = os.path.join(folder_path, new_file_name) # 重命名文件 os.rename(os.path.join(folder_path, file_name), new_file_path) print("文件名修改完成") ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pandas_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值