使用Python批量重新命名資料夾中的檔案

肖老闆發表於2017-08-23

使用Python批量重新命名資料夾中的檔案

目測這已經是第5次有人找我幫忙根據某個Excel中的表格名單對照片進行重新命名了!感覺有必要簡單分享一下使用Python來批量重新命名檔案的小指令碼,先上程式碼:

# -*- coding:utf-8 -*-

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import os
import xlrd

data = xlrd.open_workbook("name-list.xlsx")
table = data.sheets()[0]

info_dic = {}
for row_index in range(table.nrows):
    info_dic[table.cell(row_index, 0).value] = table.cell(row_index, 1).value

student_names = []
lucky_students = {}
path = "C:\\Users\\Documents\\"
new_path = "C:\\Users\\Documents\\new-folder"
for file in os.listdir(path):
    if os.path.isfile(os.path.join(path, file)) == True:
        if file.find('.jpg') < 0:
            print file
        else:
            student_number = file.split('.')[0]
            if student_number in info_dic.keys():
                student_name = info_dic[student_number]
                if student_name in student_names:
                    student_name = student_name + '-' + str(student_names.count(student_name))
                student_names.append(student_name)
                new_name = student_name + '.jpg'
                os.rename(os.path.join(path, file), os.path.join(new_path, new_name))

程式碼邏輯很簡單,如果看不懂上面程式碼的同學請看完我的解說再去面壁一下!其思路是這樣的:首先讀有名單的Excel表格(一般裡面會有一列姓名一列學號/工號這樣的),然後遍歷path指定的目錄,如果該檔名中沒有.jpg那就不是圖片檔案,忽略掉;如果是圖片檔案則查詢該圖片檔名是不是在Excel表格名單中,在的話就使用Excel表格中對應的姓名去重新命名該圖片檔案。
我在重新命名過程中遇到兩個問題,也給大家分享一下:
1. rename函式中的路徑必須是絕對路徑,否則會出現WindowsError: [Error 2]錯誤;
2. 如果重新命名時該檔名已經在目標路徑存在了,會出現WindowsError: [Error 183]錯誤,這時候該怎麼處理就看自己啦,在檔名後面加上隨機字串或者時間戳或者計數什麼的都行!

相關文章