2010-12-21 15 views
9

¿Cómo se enumeran los archivos en un directorio basado en la marca de tiempo?Lista de directorios basada en el tiempo

os.listdir() 

listas en orden arbitrario.

¿Hay una función incorporada a la lista basada en la marca de tiempo? o por cualquier orden?

+1

Quizás un duplicado de http://stackoverflow.com/q/168409/505893 – bluish

Respuesta

37

Puede llamar al stat() en cada uno de los archivos y ordenar por una de las marcas de tiempo, tal vez mediante el uso de una función clave que devuelve la marca de tiempo de un archivo.

import os 

def sorted_ls(path): 
    mtime = lambda f: os.stat(os.path.join(path, f)).st_mtime 
    return list(sorted(os.listdir(path), key=mtime)) 

print(sorted_ls('documents')) 
+0

podría explicar esto ya que no conozco el uso de las funciones lambda? – vkris

+2

Claro, las lambdas son básicamente funciones sin nombre. Pueden tomar argumentos antes de los dos puntos (en este caso hay uno: f, un nombre de archivo). El cuerpo de una lambda es una expresión única, cuyo resultado se utiliza como el valor de retorno de la lambda. La función 'sorted' toma una iterable (como una lista) y devuelve un iterador que produce una versión ordenada de la iterable dada. Proporcionar una función al argumento de palabra clave 'clave' le permite ordenar por algo que no sea el orden natural de los elementos en el iterable dado. La función 'mtime' se invoca en cada nombre de archivo y se usa para ordenar la lista. – HarryM

+0

Esa es una solución agradable e inteligente. – jmoz

0

Mi solución es inmediata,

>>> import commands 
>>> a = commands.getstatusoutput("ls -ltr | awk '{print $9}'") 
>>> list =a[1].split('\n') 

De acuerdo con la publicación duplicada señalado por azulada, esta es una mala solución; ¿porque es malo?

+4

esto se puede hacer en python puro ... no es necesario pagar y usar utilidades del sistema (que no son multiplataforma). también, se debe usar 'subprocess' en lugar de' commands'. –

Cuestiones relacionadas