无法让Python图片重命名程序正常工作

时间:2012-09-05 00:05:35

标签: python rename

这个程序应该从命令行运行,如下所示:

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$ 

1 个答案:

答案 0 :(得分:0)

你已经缩减了你的缩进,混合了空格和标签。使用python -tt进行验证。

相关问题