2017-02-25 3 views
0

디렉토리를 순환하여 각 서브 디렉토리의 파일을 읽으려고합니다. 그러나 시간 값이므로 서브 디렉토리의 이름을 추적해야합니다. 나는 다음과 같이 보이는 사전 생성 관리 :서브 디렉토리의 이름과 파일을 처리하는 방법 - 파이썬

dict = {'time1/dir1':['file1.ext', 'file2.ext'], 'time2/dir2':['name1.ext', 'name2.ext'} 

을하지만 함수에 파일의 전체 이름을 전달하는 올바른 방법을 찾을 수 없어. 내가 np.fromfile()를 사용하려고으로

, 나는 반복적으로 목록에있는 각 파일과 디렉토리/시간의 이름에 가입하고 내가 가진하도록하는 방법에 저장해야합니다

dict2 = {'time1/dir1':[value1, value2], 'time2/dir2':[value1, value2], } 

나는 또한 pandas DataFrame으로 디렉토리를 읽었지 만 시간이 일관된 방식으로 파일을 읽어야합니다.

나는이 기능을 사용할 때 os.walk(), os.path.join(), os.listdir(), glob.glob()과 다른 것들을 혼합하고 사용하려고 시도했지만 내 논리가 잘못되었을 수 있습니다.

많은 수의 디렉토리와 목록을 만드는 대신 직접 반복하고 타임 스탬프/디렉토리 이름을 유지하는보다 강력하고 간단한 방법이있을 수 있습니다.

+0

왜'os.path.join()'작동하지 않았다 :

import os import os.path base_path = "my/base/path" directory_generator = os.walk(base_path) next(directory_generator) path_tree = {} for root_path, directories, files in directory_generator: path_tree[os.path.basename(root_path)] = [ os.path.join(root_path, file_path) for file_path in files] 

결과는 이것이다? 왜 그것을 만들지 않았습니까? [ 'time1/dir1/file1.ext', 'time1/dir1/file2.ext', ...]'? – BornToCode

+0

지금까지 어떤 시도를하셨습니까? '''os.path.join() should'd'''' – abccd

+0

@abccd 디렉토리를 통해'os.walk()'로 루핑을 시도했습니다. 문제는 내가 사용하고있는 디렉토리를 알아야한다는 것입니다. 각 파일을 분리 할 수 ​​없으므로 홈 디렉토리의 모든 경로 목록을 갖고 싶지 않습니다. 그래서 사전을 만들었지 만 이름을 결합하여'np.fromfile()'에 연결할 준비가되지 않았다. – ireinstein

답변

1

찾고 계신가요?

{ 
    "dir1": [ 
     "my/full/path/dir1/file1.ext", 
     "my/full/path/dir1/file2.ext" 
    ], 
    "dir2": [ 
     "my/full/path/dir2/anotherfile1.ext", 
     "my/full/path/dir2/anotherfile2.ext" 
    ], 
} 
+0

그러나 각각 16 개의 디렉토리가 있다고 가정하면 완벽하게 작동한다. 40 개 파일을 사용하면 이러한 단계를 수행하여 개별 폴더에 대해 독립적으로 실행되는 기능을 만든 다음 그 결과를 나중에 병합하거나 이후 단계에서 결합하는 것이 더 쉽습니다. 참으로 감사합니다! – ireinstein

+1

@ireinstein 당신은 dict을 원했고 ;-)'os.walk()'는 어쨌든 생성기이므로 루프 내부의 모든 것을 수행하고 전혀 메모리를 사용하지 않아야합니다. – Bharel

관련 문제