zoukankan      html  css  js  c++  java
  • Python 初学——V_Rename(第一个完整的python程序)

    我在大一的时候就对python非常感兴趣,就是一直没有时间和机会去学习下,只是了解些表面的东西,今天早上整理电脑的时候发现文件夹里面的文件名是这样子的,有点小不舒服,特别想去除重复的“Struts2”的字样

    001

    我知道windows下直接用命令行就能重命名所有文件,网上也有很多方便的重命名软件,记得在Mac下用过一个软件叫NameChanger,特别好用。可是今天我确一点都不想用这些软件,因为我想自己编程实现我想要的重命名功能。

    使用python实现这个应该很简单的,我想会在10行以内就能完成吧。记得我大一的时候有用过C语言做过文件管理,那时候最担心的就是指针的问题了,python让我都感觉不到指针的存在。

    我开始的思路是使用正则来找出我要的文件然后替换关键字,后来发现正则有点牛刀小用了,就直接使用python的字符串操作来实现了。

    我有两个想法:

    第一个是不使用函数,用一个for循环来解决,这样的话代码量将会最少。

    结果让我很惊讶python的实力了,真的代码就只有10行!!!有点不敢相信啊,呵呵

    import os
    
    path = 'D:\baiduyundownload\struts2'
    keyword = '_Struts2_'
    rekeyword = '_'
    
    all_files = os.listdir(path)
    for filename in all_files:
        if os.path.isfile(path + '\' + filename) and filename.find(keyword) != -1:
            os.rename(path + '\' + filename,path+'\'+filename.replace(keyword, rekeyword, 1))
     

    第二的想法就是包装成函数,分步来实现,

    1. 得到带有关键字文件名数组:findFiles(path, keyword)

    2. 得到一个替换关键字后的文件名数组:replaceKeyword(files, keyword, rekeyword)

    3. 根据前两个数组重命名文件:renameFiles(files, refiles, path)

    当然我还增加了异常捕获提醒,总共代码下来就翻了4倍了,呵呵

    import os
    
    path = 'D:\baiduyundownload\struts2'
    keyword = '_Struts2_'
    rekeyword = '_'
    
    def getPath(path):
        if path.strip() != '':
            try:
                os.chdir(path)
            except os.error:
                print(path + ": No such dir...")
        else:
            path = os.getcwd()
        return path
    
    def findFiles(path, keyword):
        all_files = os.listdir(path)
        
        files = []
        for filename in all_files:
            if os.path.isfile(path + '\' + filename) and filename.find(keyword) != -1:
                files.append(filename)
        return files
    
    def replaceKeyword(files, keyword, rekeyword):
    
        refiles = []
        for filename in files:
            refiles.append(filename.replace(keyword, rekeyword, 1))
        return refiles
    
    def renameFiles(files, refiles, path):
        for i in range(len(files)):
            try:
                os.rename(path+'\'+files[i],path+'\'+refiles[i]);
            except os.error:
                print(path+'\'+files[i] + ': wrong')
                
    path = getPath(path)
    files = findFiles(path, keyword)
    refiles = replaceKeyword(files, keyword, rekeyword)
    renameFiles(files, refiles, path)

    两个想法的最后实现效果是一致的啦:

    002

    去除重复的字符是不是看着很舒服啊,哈哈,我觉得实现的过程更是一种享受。越来越喜欢python了!!!

    
  • 相关阅读:
    VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)
    VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)
    VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)
    VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)
    VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
    VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
    VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)
    spring cloud深入学习(二)-----服务注册中心spring cloud eureka
    spring cloud深入学习(一)-----什么是微服务?什么是rpc?spring cloud简介
    spring深入学习(六)-----springmvc
  • 原文地址:https://www.cnblogs.com/VellBibi/p/3480021.html
Copyright © 2011-2022 走看看