2010-12-21 9 views
9

타임 스탬프를 기반으로 디렉토리에 파일을 나열하는 방법은 무엇입니까?시간 기준 디렉토리 목록

os.listdir() 

목록은 임의의 순서로 나열됩니다.

타임 스탬프에 따라 나열 할 빌드 기능이 있습니까? 또는 어떤 순서로?

+1

어쩌면 중복의 http://stackoverflow.com/q/168409/505893 – bluish

답변

37

각 파일에 stat()을 호출하고 파일 타임 스탬프를 반환하는 키 기능을 사용하여 타임 스탬프 중 하나를 기준으로 정렬 할 수 있습니다. 내 즉각적인 솔루션입니다

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

내가 람다 함수를 사용하여 알지 못하는이 설명 할 수 있습니까? – vkris

+2

물론, 람다는 기본적으로 이름이 지정되지 않은 함수입니다. 그들은 콜론 앞에 인수를 사용할 수 있습니다 (이 경우 하나 : f, 파일 이름). 람다의 본문은 단일 표현식이며, 그 결과는 람다의 반환 값으로 사용됩니다. 'sorted' 함수는 iterable (리스트와 같은)을 취해 주어진 iterable의 정렬 된 버전을 생성하는 것보다 iterator를 리턴합니다. 'key' 키워드 인수에 함수를 제공하면 주어진 반복 가능 항목에있는 항목의 자연 순서가 아닌 다른 값으로 정렬 할 수 있습니다. 'mtime' 함수는 각 파일 이름에 대해 호출되고 목록을 정렬하는 데 사용됩니다. – HarryM

+0

그건 좋은 영리한 솔루션입니다. – jmoz

0

, 푸른 빛이 가리키는 중복 게시물 당으로

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

,이 나쁜 솔루션입니다; 왜 그렇게 나쁜거야?

+4

이것은 순수한 파이썬에서 수행 될 수 있습니다 ... 껍질을 벗기고 시스템 유틸리티 (크로스 플랫폼이 아닌)를 사용할 필요가 없습니다. 또한'commands' 대신'subprocess'가 사용되어야합니다. –

관련 문제