设为首页 收藏本站
查看: 1139|回复: 0

[经验分享] python脚本:批量重命名文件名

[复制链接]

尚未签到

发表于 2015-4-20 10:43:37 | 显示全部楼层 |阅读模式
  最近在跟着师姐做一个项目,需要不断地抠样本,用于学习训练。每次扣完样本后都需要重新批量命名一下,虽然Windows7可以批量重命名,但是文件一多的时候就很容易发生资源管理器卡死了。。。因此,决定写个python的脚本,节省下以后重命名的时间。

  代码



#!\usr\bin\env python
# -*- coding: utf-8 -*-
# Author: PZX
# FileName: batchrename.py
# Function: 批量命名某一文件夹下的文件名

import sys
import os
def UsePrompt():
    #如果省略path,则path为当前路径
    print 'Useage: batchrename.py [path] newfilenames'
    sys.exit()
def BatchRename(path, pattern):
    #设置路径
    os.chdir(path)
    fileList = os.listdir(path)
    dotIndex = pattern.rfind('.')
    fileName = pattern[ : dotIndex]
    fileExt = pattern[dotIndex : ]
    genNum = 0
    for fileItem in fileList:
        fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
        os.rename(fileItem, fileFullName)
        print (fileItem + ' => ' + fileFullName)
        genNum += 1
def main():
    if len(sys.argv) == 3:
        path = sys.argv[1]
        pattern = sys.argv[2]
    elif len(sys.argv) == 2:
        path = os.getcwd()
        pattern = sys.argv[1]
    else:
        UsePrompt()
    confirm = raw_input('Confirm(y|n): ')
    if confirm == 'n':
        sys.exit()
    BatchRename(path, pattern)
if __name__ == '__main__':
    main()  
 新增:
    添加撤销上次批量重命名功能。使用方法:batchrename.py /r
    



#!\usr\bin\env python
# -*- coding: utf-8 -*-
# Author: PZX
# FileName: batchrename.py
# Function: 批量命名某一文件夹下的文件名

import sys
import os
import os.path
import pickle
def UsePrompt():
    #如果省略path,则path为当前路径
    print 'Useage: batchrename.py [path] [newfilenames | /r]'
    print '\tuse /r to cancel the renaming operation'
    sys.exit()
def BatchRename(path, pattern):
    #设置路径
    os.chdir(path)
    fileList = os.listdir(path)
    dotIndex = pattern.rfind('.')
    fileName = pattern[ : dotIndex]
    fileExt = pattern[dotIndex : ]
    genNum = 0
    fileNameDict = {}
    for fileItem in fileList:
        fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
        os.rename(fileItem, fileFullName)
        genNum += 1
        print (str(genNum) + ': ' + fileItem + ' => ' + fileFullName)
        fileNameDict[fileItem] = fileFullName
    #保存重命名的记录
    recordDir = os.path.dirname(__file__)
    recordPath = os.path.join(recordDir, 'batchrenamerecord')
    recordFile = file(recordPath, 'wb')
    pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
    pickle.dump(fileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
    recordFile.close()
def CancelBatchRename():
    #读取上一次重命名的记录文件
    recordDir = os.path.dirname(__file__)
    recordPath = os.path.join(recordDir, 'batchrenamerecord')
    recordFile = file(recordPath, 'rb')
    path = pickle.load(recordFile)
    fileNameDict = pickle.load(recordFile)
    recordFile.close()
    os.chdir(path)
    #撤销上一次重命名
    genNum = 0
    newFileNameDict = {}
    for orgName, newName in fileNameDict.items():
        os.rename(newName, orgName)
        genNum += 1
        print (str(genNum) + ': ' + newName + ' => ' + orgName)
        newFileNameDict[newName] = orgName
    recordDir = os.path.dirname(__file__)
    recordPath = os.path.join(recordDir, 'batchrenamerecord')
    recordFile = file(recordPath, 'wb')
    pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
    pickle.dump(newFileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
    recordFile.close()   
   
def main():
    cancelling = False
    if len(sys.argv) == 3:
        path = sys.argv[1]
        pattern = sys.argv[2]
    elif len(sys.argv) == 2:
        if sys.argv[1] == '/r':
            cancelling = True
        else:
            path = os.getcwd()
            pattern = sys.argv[1]
    else:
        UsePrompt()
    confirm = raw_input('Confirm(y|n): ')
    if confirm == 'n':
        sys.exit()
    if cancelling:
        CancelBatchRename()
    else:
        BatchRename(path, pattern)
if __name__ == '__main__':
    main()
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58721-1-1.html 上篇帖子: python变量赋值(可变与不可变) 下篇帖子: 用python抓取oj题目(1)——用beautifulsoup分析oj元素
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表