Python Deleting Certain File Extensions

狂风中的少年 提交于 2019-11-29 15:34:47

问题


I'm fairly new to Python, but I have gotten this code to work, and in fact, do what it's intended to do.

However, I'm wondering if there is a more efficient way to code this, perhaps to enhance the processing speed.

 import os, glob


def scandirs(path):
    for currentFile in glob.glob( os.path.join(path, '*') ):
        if os.path.isdir(currentFile):
            print 'got a directory: ' + currentFile
            scandirs(currentFile)
        print "processing file: " + currentFile
        png = "png";
        jpg = "jpg";
        if currentFile.endswith(png) or currentFile.endswith(jpg):
            os.remove(currentFile)

scandirs('C:\Program Files (x86)\music\Songs')

Right now, there are about 8000 files, and it takes quite some time to process every file and check if it indeed ends in png or jpg.


回答1:


Since you are recursing through subdirectories, use os.walk:

import os

def scandirs(path):
    for root, dirs, files in os.walk(path):
        for currentFile in files:
            print "processing file: " + currentFile
            exts = ('.png', '.jpg')
            if currentFile.lower().endswith(exts):
                os.remove(os.path.join(root, currentFile))



回答2:


If the program works and the speed is acceptable, I wouldn't change it.

Otherwise, you could try unutbu's answer.

Generally, I would leave away the

png = "png"
jpg = "jpg"

stuff as I don't see any purpose in not using the strings directly.

And better test for ".png" instead of "png".

An even better solution would be to define

extensions = ('.png', '.jpg')

somewhere centally and use that in

if any(currentFile.endswith(ext) for ext in extensions):
    os.remove(currentFile)

.



来源:https://stackoverflow.com/questions/7833715/python-deleting-certain-file-extensions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!