2017-04-22 13 views
0

20170423과 같은 날짜가 포함 된 디렉토리 경로를 어떻게 찾을 수 있습니까? 의미, 그것은 어떤 날짜가 될 수 있지만 내가 날짜를 포함하는 폴더를 얻을 때까지 그 구체적인 경로를 갖고 싶다. 거기에 그 패턴을 포함하는 방식으로 여러 하위 디렉토리가있을 수 있지만 특별한 경우, 어디에 내가 적절한 폴더를 선택하기 위해 폴더의 내용처럼 더 많은 정밀도를 제공해야합니다. 당신은 특별한 경우를 위해 싶습니다 경우에 그것에게 기회를주고,하지만 난 길을 따라 하나의 폴더가 그 패턴이 포함되어 있는지 알고있는 경우에, 내가 시작하는 방법입니다 : 이것은 나에게 모든 경로를 제공Python의 디렉토리에서 특정 경로 찾기

directPaths_list = [f.path for f in os.scandir(start) if f.is_dir() ] 

시작 폴더에서 끝까지. 자, 내가 그 날짜 패턴을 가지고있는 경로를 반환하고 싶습니다, 그리고 특히 하나는 int (folder_name)가 <입니다. datetime.datetime.today()

나는 거친 솔루션이지만, 그래서 아주 좋은 기술을 가진 사람들이 succint 우아한 솔루션을 생각해 냈습니다. 그래서 거기에 어떤 아이디어가 있습니까? 감사! 예를 들어

, 경로 시작을위한 = C :이 C 반환/: \를 사용자 \ ABC \ 데프 \ GHI \ 20,170,412

내가 일할 수있는이 같은 것을 생각했다 :

[f.path for f in os.scandir('C:\\Users\\abc\\def\\ghi\\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ] 

답변

1

날짜가 20170423이라고 가정하면 이에 따라 명명 된 파일입니다. 그런 다음 os.walk() 사용할 수 있습니다

start = "C:\\Users\\abc\\" 

for dirpath, dirnames, filenames in os.walk(start): 
    for filename in filenames: 
     if filename == "20170412": 
      filename = os.path.join(dirpath, filename) 
      print(filename) 
      print(dirpath) 

단 하나의 파일이 다음 C:\Users\abc\def\ghi\20170412 존재하는 경우 위의 것 출력 : 문이 filename.startswith("2017")을 확인할지 여부를 맞는 경우

C:\Users\abc\def\ghi\20170412 
C:\Users\abc\def\ghi\ 

당신은 물론 변경할 수 있습니다 또는 다른 것.

경고 : start = "C:\\"을 할 경우는 다음이 거 완료하는 데 looong 시간이 걸릴 가능성이 높습니다. C 드라이브의 모든 단일 디렉터리를 통해 실행되기 때문에. C:\Users\abc\def\ghi\20170412 실제로 디렉토리 인 경우

당신은 동등하게 같은 전과 후, for filename in filenames

for dirname in dirnames: 
    if dirname == "20170412": 
     dirname = os.path.join(dirpath, dirname) 
     print(dirname) 
     print(dirpath) 

따라서 위의 것 출력을 변경할 수 있습니다

C:\Users\abc\def\ghi\20170412 
C:\Users\abc\def\ghi\ 

이 좀 더 간결 뭔가를 기대했다

그것이 당신이 더 간략하게 부르는 것이면 그것은 목록 이해로 그것을 포장한다.

files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"] 
+0

감사합니다! 하지만 난 디렉토리를 원한다면, 단지 'dirname에 dirname에 대해서' 과'dirname uniXVanXcel

+1

예. dirname에 dirname을 사용하는 경우에도 똑같이 할 수 있습니다. 파일이나 디렉토리를 찾았 으면 부모 디렉토리는'dirpath'가됩니다. – Vallentin

+0

멋진!C : \\ 내가 os.walk ("C : \\ Users \ ...", topdown = False)로 검색을 할 수있는 당신의 의견에' – uniXVanXcel