Pregunta Python eliminando ciertas extensiones de archivo


Soy bastante nuevo en Python, pero he conseguido que este código funcione, y de hecho, hago lo que está destinado a hacer.

Sin embargo, me pregunto si hay una forma más eficiente de codificar esto, tal vez para mejorar la velocidad de procesamiento.

 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')

En este momento, hay aproximadamente 8000 archivos, y lleva bastante tiempo procesar cada archivo y verificar si realmente termina en png o jpg.


5
2017-10-20 09:21


origen


Respuestas:


Como estás recurriendo a través de subdirectorios, usa 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))

15
2017-10-20 09:25



Si el programa funciona y la velocidad es aceptable, no lo cambiaría.

De lo contrario, podrías intentar la respuesta de unutbu.

En general, dejaría el

png = "png"
jpg = "jpg"

cosas que no veo ningún propósito en no usar las cadenas directamente.

Y mejor prueba para ".png" en lugar de "png".

Una solución aún mejor sería definir

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

En algún lugar central y usar eso en

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

.


1
2017-10-20 09:29