2013-08-16 2 views
52

파이썬에서 특정 유형의 가장 최근에 수정 된 파일 (여기에서부터 '최신')을 찾으려고합니다. 나는 현재 가장 최신의 것을 얻을 수 있지만 어떤 타입이든 상관 없습니다. 최신 MP3 파일 만 가져오고 싶습니다. Python : 디렉토리에 .MP3 확장자를 가진 최신 파일 찾기

현재 내가 가진 :

import os 

newest = max(os.listdir('.'), key = os.path.getctime) 
print newest 

A를이를 수정하는 방법 만 나에게 유일한 최신 MP3 파일을주고 있는가?

+0

'os'는 무엇입니까? – enginefree

+0

@enginefree : Python과 함께 제공되는 표준 라이브러리의 모듈입니다. 'import os'를 작성하면 [모듈의 모든 유용한 기능] (http://docs.python.org/2/library/os.html)을 호출 할 수 있습니다. – abarnert

+0

@abarnert'os' 모듈이 무엇인지 압니다. 나는 내가 그런 말을하지 않았다고 맹세한다. 내 계정이나 다른 것을 두 번 열어야합니다. 혼동을 피하기 위해 – enginefree

답변

88

사용 glob.glob :

import os 
import glob 
newest = max(glob.iglob('*.[Mm][Pp]3'), key=os.path.getctime) 
+2

훌륭한 솔루션입니다. 그러나 OP는'.MP3 '을 요구했기 때문에'glob'(*. MP3 ')'가 직접 질문에 대답하기를 원합니다. 대소 문자를 구별하지 않는 것이 아마도 그가 원하는 것일 수도 있습니다. – abarnert

+0

@abarnert, 의견을 주셔서 감사합니다. 코드를 'MP3'로 업데이트했습니다. BTW,'iglob'는'glob'의 대소 문자를 구별하지 않습니다. – falsetru

+0

'glob'의 대소 문자를 구별하지 않습니다. 당신은 수동으로'fnmatch'를 사용해야합니다 ('glob'문서에서 링크 된 소스가 훌륭한 예제 코드로 사용됩니다). – abarnert

2

이 사람에게 시험 보내기

import os 
print max([f for f in os.listdir('.') if f.lower().endswith('.mp3')], key=os.path.getctime) 
+0

경로의 경로 메서드 대신 문자열 메서드를 사용하면 가장자리의 버그를 처리하는 좋은 방법입니다. 하지만 그렇게할만한 이유가 없다면 왜 stdlib에 배터리 ('glob'와'fnmatch')를 복제하려고 시도합니까? – abarnert

+0

300 회 실행으로 인해 내 코드가 거기 falsetru의 것보다'18 % 빠름 '을 실행합니다 – scohe001

+0

그리고 그 시간이 어떤 실제 프로그램에서도 중요하게 될 것이라고 생각하십니까? 성능에 대해 정말로 신경 쓰는 경우 각 파일에 stat를 호출하는 대신 디렉토리를 검사 할 때 각 파일의 통계를 얻는 하위 수준의 API를 사용하여 60-95 %를 줄일 수 있습니다. – abarnert

11

당신이 OS를 수입 경로를 정의한 가정을이 작동합니다 :

dated_files = [(os.path.getmtime(fn), os.path.basename(fn)) 
       for fn in os.listdir(path) if fn.lower().endswith('.mp3')] 
dated_files.sort() 
dated_files.reverse() 
newest = dated_files[0][1] 
print(newest) 
+2

훨씬 명확한 코드가 대답을 수락했습니다. – shaioz

-2
for file in os.listdir(os.getcwd()): 
    if file.endswith(".mp3"): 
     print "",file 
     newest = max(file , key = os.path.getctime) 
     print "Recently modified Docs",newest 
0

학습 목적으로 @Kevin Vincent와 기본적으로 동일하지만, 읽기 쉽고 이해하기가 더 쉽습니다.

import datetime 
import glob 
import os 

mp3Dir = "C:/mp3Dir/" 
filesInmp3dir = os.listdir(mp3Dir) 

datedFiles = [] 
for currentFile in filesInmp3dir: 
    if currentFile.lower().endswith('.mp3'): 
     currentFileCreationDateInSeconds = os.path.getmtime(mp3Dir + "/" + currentFile) 
     currentFileCreationDateDateObject = datetime.date.fromtimestamp(currentFileCreationDateInSeconds) 
     datedFiles.append([currentFileCreationDateDateObject, currentFile]) 
     datedFiles.sort(); 
     datedFiles.reverse(); 

print datedFiles 
latest = datedFiles[0][1] 
print "Latest file is: " + latest 
관련 문제