利用Python快速批量修改資料集檔名

Miller_em發表於2020-12-02

簡介

最近在做一些目標檢測的工作,但是找到的資料集有一萬多張圖片,而且圖片每張照片的名字都是亂的,這在後面的資料集的預處理上面就會遇到很多的麻煩,於是就想到利用python寫一個指令碼,幫助批量的修改檔名——按照一定的順序生成檔名修改。

用到的工具-os模組

我們要修改名字,主要是檔案目錄的操作,所以肯定是避免不了os這個庫。修改思路就是:進入到目標下,修改要生成的檔名的格式就好了。

程式碼:

# -*- coding: utf-8 -*-
import os

# (os.path.abspath('.')  列印絕對路徑
# os.path.join(a, b) --> a/b   拼接路徑
# os.path.split(a/b) --> 這樣可以把一個路徑拆分為兩部分,
#                       後一部分總是最後級別的目錄或檔名
# os.path.splitext() -->得到檔案擴充名
# os.rename()   --> 對檔案重新命名
# os.remove() --> 刪除檔案
# os.path.dirname() -->獲取檔案或資料夾的路徑
# os.path.isfile/os.path.isdir() -->確認是檔案或者資料夾
# os.walk() -->遍歷目錄,return (dirpath, dirnames, filenames).
#              dirpath 是以 string 字串形式返回該目錄下所有的絕對路徑;
#              dirnames 是以列表 list 形式返回每一個絕對路徑下的資料夾名字;
#              filesnames 是以列表 list 形式返回該路徑下所有檔名字。

def modi_dataname(dirpath):
    '''
        從00000開始依次加一,如00000.jpg
    '''
    length = 0
    filesnames = []
    for dirpath, dirnames, filesnames in os.walk(dirpath):
        length = len(filesnames)               #獲取資料集的圖片個數
        # print(length)
    for i in range(length):
        num = str(i).zfill(5)
        filename = "fire_" + num                        #修改檔名的格式
        scrfilename = dirpath + "\\" + filesnames[i]           #修改前的檔名
        nowfilename = dirpath + "\\" + filename + ".jpg"       #修改的檔名
        # print("修改前的檔名", scrfilename)
        # print("修改後的檔名", nowfilename)
        try:
           os.rename(scrfilename,nowfilename)
        except Exception as e:
           print('rename file fail\r\n')
        else:
           print('rename file successfullly\r\n')
    
if __name__ == '__main__':
    path = os.path.abspath('.')
    # print(path)
    modi_dataname(path)

如果要修改的檔名的話就修改filename就好了。在命令列直接python執行就可以了。

相關文章