| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
使用场景:适合大批量文件名修改工作. 
前提:有现成或者半成品的对应文件及需要被修改的图片(其他文件等) 
限制条件:对应文件目前只支持TXT.(大神们有时间的话可帮忙修改成可支持EXCEL的,不胜感激!!!) 
源代码如下: 
 
import easygui as eg 
import os 
import os.path as op 
import datetime as dt 
 
 
# 获取对应文件的内容存放于all_filename_dict字典中,对应文件本身重复的信息存放在existin_filename_list 中并发挥 
def Getpath(file_path): 
    # 定义存放对应信息的字段 
    all_filename_dict = {} 
    # 定义存放重复信息的列表 
    existin_filename_list = [] 
    # 按照路径打开对应文件并进行遍历 
    try: 
        with open(file_path) as file_txt: 
            for each_filename in file_txt: 
                (filename_old, filename_new) = each_filename.split(',', 1) 
                if filename_old in all_filename_dict.keys(): 
                    existin_filename_list.extend([[filename_old, filename_new.splitlines()[0]]]) 
                else: 
                    all_filename_dict[filename_old] = filename_new.splitlines()[0] 
    except OSError as reason: 
        print('出错了!!!', str(reason)) 
    # print('A-', existin_filename_list) 
    # 
    # for i in all_filename_dict: 
    #     print('B-原文件名是:%s,修改后文件名是:%s' % (i, all_filename_dict[i])) 
    # for ii in sorted(existin_filename_list): 
    #     print('C-(重复文件,注意警戒)原文件名是:%s,修改后文件名是:%s' % (ii[0], ii[1])) 
    return all_filename_dict, existin_filename_list 
 
 
# 根据对应文件的内容关系,修改文件对象的文件名 
def UpdateObject(file_object_list, all_filename_dict, file_object_path): 
    # 定义:对象文件在对应文件中匹配不到信息(照片找不到个人信息) 
    noexist_fileobjet = [] 
    # 定义:对象文件按照规则修改后的名字重复(同一学籍号对应多个人员信息) 
    existin_fileobjet_list = [] 
    # 定义:文件对象列表 
    all_object_list = [] 
    # 定义:对应文件中的信息找不到文件对象(无照片人员信息) 
    all_filename_exist = [] 
    # 更改当前路径为文件对象的路径 
    os.chdir(file_object_path) 
    # 遍历文件对象列表,判断 
    for each_odject in file_object_list: 
        (each_odject_filename, each_odject_type) = op.splitext(each_odject) 
        all_object_list.append(each_odject_filename) 
 
        if each_odject_filename in all_filename_dict.keys(): 
            try: 
                # 修改文件名 
                os.rename(each_odject, all_filename_dict[each_odject_filename] + each_odject_type) 
            except: 
                # print('E-文件对象%s按照对应文件中规则修改后的名字%s重复' % ( 
                #     each_odject, all_filename_dict[each_odject_filename] + each_odject_type)) 
                existin_fileobjet_list.append(each_odject) 
                os.rename(each_odject, all_filename_dict[each_odject_filename] + '重复' + each_odject_type) 
 
        else: 
            # print('F-文件对象%s在对应文件中不存在' % each_odject_filename) 
            noexist_fileobjet.append(each_odject_filename) 
    # 分析对应文件中的信息找不到文件对象的信息(无照片) 
    for each_dict_key in all_filename_dict.keys(): 
        if each_dict_key not in all_object_list: 
            all_filename_exist.append(each_dict_key) 
    return existin_fileobjet_list, noexist_fileobjet, all_filename_exist 
 
 
# 问题情况保存到D盘下的文件(文件夹名批量修改日志)里的TXT文件里(文件名为当前系统时间:nowtime) 
def SaveLog(existin_filename_list, existin_fileobjet_list, noexist_fileobjet, all_filename_exist, nowTime): 
    # 定义:问题信息存放的字符串 
    str_msg = '' 
    for each_one in existin_filename_list: 
        str_msg += '对应文件中本身重复(学籍重复):%s\n' % each_one 
    for each_two in existin_fileobjet_list: 
        str_msg += '对象文件按照规则修改后的名字重复(同一学籍号对应多个人员信息):%s\n' % each_two 
    for each_three in noexist_fileobjet: 
        str_msg += '对象文件在对应文件中匹配不到信息(照片找不到个人信息):%s\n' % each_three 
    for each_four in all_filename_exist: 
        str_msg += '对应文件中的信息找不到文件对象(无照片):%s\n' % each_four 
    # 固定日志的保存路径 
    try: 
        os.mkdir('D://文件夹名批量修改日志') 
    except: 
        eg.msgbox('路径:D://文件夹名批量修改日志已存在') 
    # 创建文件并保存str_msg 
    try: 
        with open('D://文件夹名批量修改日志//nowTime' + '.log', 'w') as file_log: 
            file_log.write(str_msg) 
    except OSError as reason: 
        print('出错了!!!', str(reason)) 
 
 
# ----------------------------------------------------------------------------------------------------------------- 
eg.msgbox(msg='注意事项:\n对应文件字段:原文件名,修改后文件名,用逗号隔开,类型为TXT文件' 
              '\n对应文件需要仔细检查和整理!!!\n(*不能存在空格,空行等,不符合身份证规则的应该提前处理掉.)', title='文件名修改') 
file_path = eg.fileopenbox(title='选择对应文件', msg='TXT', default='', filetypes=["*.txt"]) 
# ----------------------------------------------------------------------------------------------------------------- 
(all_filename_dict, existin_filename_list) = Getpath(file_path) 
# ----------------------------------------------------------------------------------------------------------------- 
file_object_path = eg.diropenbox(msg='选择需要修改的文件的存放路径', title='选择路径') 
# ----------------------------------------------------------------------------------------------------------------- 
file_object_list = os.listdir(file_object_path) 
# ----------------------------------------------------------------------------------------------------------------- 
(existin_fileobjet_list, noexist_fileobjet, all_filename_exist) = UpdateObject(file_object_list, all_filename_dict, 
                                                                               file_object_path) 
# 获取当前系统时间 
nowTime = dt.datetime.now().strftime('%Y-%m-%d') 
# ----------------------------------------------------------------------------------------------------------------- 
SaveLog(existin_filename_list, existin_fileobjet_list, noexist_fileobjet, all_filename_exist, nowTime) 
 |   
 
 
 
 |