程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Python批量重命名文件示例

Python批量重命名文件示例

編輯:關於PHP編程

       Python批量重命名文件方法很簡單我們會利用listdir與rename 再加上目錄遍歷即可實現文件重命令了,下面整理了一些方法。

      用到了os的兩個接口:

      1、列出文件夾中的所有文件(也包含目錄)

      os.listdir(path)

      Return a list containing the names of the entries in the directory given by path. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory.

      Availability: Unix, Windows.

      Changed in version 2.3: On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects

      2、對文件進行重命名

      os.rename(src, dst)

      Rename the file or directory src to dst. If dst is a directory, OSError will be raised. On Unix, if dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail on some Unix flavors if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement). On Windows, if dst already exists, OSError will be raised even if it is a file; there may be no way to implement an atomic rename when dst names an existing file.

      Availability: Unix, Windows

     代碼如下   import os 
      
    dirpath="D:/workbench/crazyant.net/myfiles"
    for fname in os.listdir(dirpath): 
        newfname=fname[3:] 
        newfpath="%s/%s"%(dirpath,newfname) 
        oldfpath="%s/%s"%(dirpath,fname) 
          
        os.rename(oldfpath, newfpath)

      其實就是用os.listdir讀取裡面所有的文件,然後用os.rename進行文件重命名即可實現

      3、對於上面的辦法我還找到一些方法

     代碼如下  

    # coding=utf-8 
      
    import os 
    import re 
      
    path = "D:temp"
    pattern = re.compile('d{3}') 
      
    for file in os.listdir(path): 
        if os.path.isfile(os.path.join(path, file)): 
            match = pattern.search(file) 
            assert match 
            name = match.group() + '.mp3'
            #print file, name 
            os.rename(os.path.join(path, file), os.path.join(path, name))

      要注意match和search的區別:match是從頭開始匹配,search就是貪心。其實也沒這麼復雜有一個叫Bulk Rename Utility的玩意兒就是拿來重命名用的。

      再補充一個

      輸入指定目錄,程序處理該目錄及其包含有big.jpg文件的子目錄,

      將名稱類似’big(5).jpg’的文件改名為’big_5.jpg’,

      即 big(N).jpg ==> big_N.jpg

      代碼如下:

      # coding: cp936

      """

      文件重命名

      輸入指定目錄,程序處理該目錄及其包含有big.jpg文件的子目錄,

      將名稱類似'big(5).jpg'的文件改名為'big_5.jpg',

      即 big(N).jpg ==> big_N.jpg

      @author chenwei

      @date 2010-12-26

      """

      import glob

      import os

      def main():

      print '重命名任務開始'

      base_dir = raw_input('請輸入待處理目錄:')

      # 處理頂級目錄

      rename_dir(base_dir)

      # 查找包含有big.jpg文件的子目錄

      pattern = base_dir + r'*big.jpg'

      file_list = glob.glob(pattern)

      # 對各目錄分別進行處理

      for file in file_list:

      i = file.rindex('')

      dir = file[:i]

      rename_dir(dir)

      print '重命名任務完成'

      raw_input('輸入任意內容結束')

      def rename_dir(dir):

      # 根據模式查找待改名的文件

      pattern = dir + r'big(*).jpg'

      file_list = glob.glob(pattern)

      # 分別處理各文件

      for file in file_list:

      rename_file(file)

      def rename_file(fname):

      # 取得文件名,去除路徑及擴展名

      i = fname.rindex('')

      j = fname.rindex('.')

      basename = fname[i+1:j]

      # 獲取文件編號

      k = basename.rindex('(')

      l = basename.rindex(')')

      seq = basename[k+1:l]

      # 新文件名

      new_fname = fname.replace(fname[i+1:j], 'big_'+seq)

      # 重命名

      try:

      os.rename(fname, new_fname)

      print '重命名 ' + fname + ' to ' + new_fname + ' 成功'

      except:

      print '重命名 ' + fname + ' to ' + new_fname + ' 失敗'

      if __name__ == '__main__':

      main()

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved