2012-09-05 58 views
1

這個程序應該從這樣的命令行中運行:無法獲取圖片的Python程序重命名工作權

python Filename Folder_photos_are_in New_Prefix 

它應該只是重命名這些文件,但它不工作,所以我不得不它在運行時分別打印每個功能。它似乎能夠正常工作,直到SortByMTime函數刪除列表中除最後一個之外的所有文件。

下面是代碼:

import sys 
    import os 
    import random 

    def filterByExtension(root, allfiles, extensions): 
     files = [] 
     for f in allfiles: 
      hasExt = f.rfind('.') 
      if(hasExt > 0): 
       ext = f[hasExt+1::].lower() 
       if(ext in extensions): 
        f2 = os.path.join(root, f) 
        if(os.path.isfile(f2)): 
         files.append(f) 
        else: 
         print "Matching irregular file " + f 
     return files 


    def sortByMTime(root, matching): 
     photos = [] 
     for f in matching: 
      path = os.path.join(root, f) 
      mtime = os.path.getmtime(path) 
      photos.append((mtime, f)) 
      photos.sort() 
     return photos 

    def assignNames(prefix, inorder): 
     kount = str(len(inorder)) 
     digits = len(kount) 
     template = '%%0%dd' % digits 
     newnames={} 
     kount = 0 
     for i in inorder: 
      kount += 1 
      s = template % kount 
      newnames [i[1]] = prefix+s+'.'+i[1].split('.')[1] 
     return newnames 
     print newnames 

    def makeTempName(allfiles): 
     r = random.randrange(0,1000000000) 
     name = "__temp%i__" % r 
     while name in allfiles: 
      r+=1 
      name = "__temp%i__" % r 
     return name 

    def makeScript(inorder, newnames, tempname): 
     chain = [] 
     inthechain = {} 
     script = [] 
     for i in inorder: 
      if i not in newnames: 
       continue 
      if newnames[i] == id: 
       del newnames[i] 
       continue 
      if newnames[i] not in newnames: 
       target = newnames[i] 
       script.append((i,target)) 
       del newnames[i] 
        continue 
      else: 
       link = i 
       while True: 
        target = newnames[i] 
        chain.append((link, target)) 
        inthechain[link] = True 
        link = target 
        if link not in newnames: 
         break 
      chain.reverse() 
      for (a, b) in chain: 
       print "This is in the chain: " 
       print chain 
       script.append(a,b) 
       del newnames[a] 
     return script 

    def doRenames(root, script): 
     for (old, new) in script: 
      print "%s -> %s" %(old, new) 
      fulloldpath=os.path.join(root, old) 
       fullnewpath = os.path.join(root, new) 
      if os.path.exists(fullnewpath): 
       print "File already exists" 
       os.exit(1) 
      else: 
       os.rename(fulloldpath, fullnewpath) 




    def main(): 
     usrdir = [] 
     allfiles = [] 
     path = [] 
     prefix = '' 
     args = sys.argv 
     args.pop(0) #remove first thing from list 
     if len(args) == 2: #Directory and Prefix are provided 
      print "Directory: ", args[0] 
      print "Prefix: ", args[1] 
      usrdir = args[0] 
      path = os.path.abspath(usrdir) 
      prefix = os.path.basename(path) 
     if len(args) == 1: #Only directory is provided 
      args.append(args[0]) #Makes the directory name the prefix as well 
      print "Directory: ", args[0] 
      print "Prefix: ", args[1] 
      usrdir = args[0] 
      path = os.path.abspath(usrdir) 
      prefix = os.path.basename(path) 
     if len(args) == 0 or len(args) > 2: #ends the programs because wrong number of arguments. 
      print "INVALID Number of Arguments:" 
      print "Usage: python bulkrename.py <directory> [<prefix>]"  
      exit(1) 
     allfiles = os.listdir(usrdir) 
     print "Printout of allfiles" 
     print allfiles 
     print 
     root = os.path.abspath(args[0]) 
     print "root: ", root 
     print 
     extensions = ['jpeg', 'jpg', 'png', 'gif'] 
     print "What Extensions should be able to be used: " 
     print extensions 
     print 
     matching = filterByExtension(root, allfiles, extensions) 
     print "What comes out of filterByExtension" 
     print matching 
     print 
     inorder = sortByMTime(path, matching) 
     print "What comes out of sortByMTime" 
     print inorder 
     print 

     newnames = assignNames(prefix, inorder) 
     print "What comes out of assignNames" 
     print newnames 
     print 
     tempname = makeTempName(allfiles) 
     print "What comes out of makeTempName" 
     print tempname 
     print 
     script = makeScript(inorder, newnames, tempname) 
     print "What comes out of makeScript" 
     print script 
     print 
     doRenames(path, script) 
     print "What comes out of doRenames" 
     print doRenames 
     print 

    main() 

,這裏是從終端

virus-haven:CS1410 chrislebaron$ python bulkrenamer.py bulkrename test 
    Directory: bulkrename 
    Prefix: test 
    Printout of allfiles 
    ['.DS_Store', '20120902Snow_Canyon02.JPG', '20120902Snow_Canyon03.JPG',   '20120902Snow_Canyon05.JPG', '20120902Snow_Canyon06.JPG', '20120902Snow_Canyon08.JPG',   '20120902Snow_Canyon09.JPG', '20120902Snow_Canyon11.JPG', '20120902Snow_Canyon12.JPG',   'airplane.png', 'BackNoText.jpg', 'blah', 'FrontNoText.jpg', 'glitchbusters.jpg',   'IMG_7663.JPG', 'IMG_7664.JPG', 'Pomegranates.jpg', 'rccar.png'] 

    root: /Users/chrislebaron/Documents/School/CS1410/bulkrename 

    What Extensions should be able to be used: 
    ['jpeg', 'jpg', 'png', 'gif'] 

    What comes out of filterByExtension 
    ['20120902Snow_Canyon02.JPG', '20120902Snow_Canyon03.JPG', '20120902Snow_Canyon05.JPG', '20120902Snow_Canyon06.JPG', '20120902Snow_Canyon08.JPG', '20120902Snow_Canyon09.JPG', '20120902Snow_Canyon11.JPG', '20120902Snow_Canyon12.JPG', 'airplane.png', 'BackNoText.jpg', 'FrontNoText.jpg', 'glitchbusters.jpg', 'IMG_7663.JPG', 'IMG_7664.JPG', 'Pomegranates.jpg', 'rccar.png'] 

    What comes out of sortByMTime 
    [(1322960835.0, 'rccar.png')] 

    What comes out of assignNames 
    {'rccar.png': 'bulkrename1.png'} 

    What comes out of makeTempName 
    __temp55210675__ 

    What comes out of makeScript 
    [] 

    What comes out of doRenames 
    <function doRenames at 0x100dede60> 

    virus-haven:CS1410 chrislebaron$ 

回答

0

你瘋玩的壓痕,混合空格和製表符的輸出。使用python -tt進行驗證。

+0

謝謝,我認爲這樣更好 – chrislebaron