2017-12-12 2 views
1

패턴으로 시작하는 경로에서 최신 폴더를 찾을 수 있는지 물어보고 싶습니다. C:\Users\user특정 단어로 시작하는 경로에서 최신 폴더 찾기

은 (우리가 걱정하지 않는 다른 많은) 4 개 폴더가 있습니다 이름이 :

folder13, folder15, folder17, folder20 

가 어떻게 돌아갈 수를

예, 이제 우리가이 경로에있는 가정 해 봅시다 최신 폴더 번호가 20이고 파이썬이 있습니까?

답변

0

먼저 os.listdir()를 사용하여 파일 및 폴더의 목록을 생성합니다. 그런 다음 폴더 만 포함하도록 필터링하십시오. 다음으로 sorted()을 사용하여 이름에 포함 된 숫자 값에 따라 항목을 정렬하십시오. 숫자의 여러 수준이있을 일어날 때, 예를 들어 Folder20_1라는 폴더 분류 될 수 있도록

import os 
import re 

folders = [folder for folder in os.listdir(r'C:\Users\user') if os.path.isdir(folder)] 
folders = sorted(folders, key=lambda x: [int(v) if len(v) else -1 for v in re.findall('(\d+)', x)]) 

print(folders[-1]) 

이 방법은 작동합니다 : 마지막으로, 가장 많은 사람을 얻기 위해 정렬 된 목록의 마지막 항목을 (20, 1).

0

먼저 os.walk 함수를 사용하여 지정한 루트 폴더 (재귀 적으로) 또는 os.listdir의 모든 하위 폴더를 구문 분석하여 디렉터리의 항목 이름이 포함 된 목록을 가져올 수 있습니다.

다음은 re 모듈을 사용할 수 있으며 정규 표현식을 사용할 수있는 몇 가지 기능을 제공합니다. 여기에 예를

:이 웹 사이트는 당신이 구현하기 전에 정규 표현식을 테스트하는 데 도움이 될 수 있습니다

rootPath = "C:\\Users\\user" 
pattern = re.compile(r"^.+[^\d](\d+)$") 
latestFolderNumber = 0 
dirs = [entry for entry in os.listdir(rootPath) if os.path.isdir(os.path.join(rootPath, entry))] 
for name in dirs: 

    match = pattern.match(name) 
    if match: 
      latestFolderNumber = int(match.group(1)) 


print("The latest number is " + latestFolderNumber) 

: https://regex101.com/

관련 문제