2012-09-25 2 views
1

100 내용의 파일 이름이 alex.txt이고 mark.txt이라는 파일 이름이 400 인 두 개의 파일이 들어있는 main 디렉터리가 있습니다.전체 디렉토리의 파일 이름과 내용을 얻으려면 어떻게해야합니까?

디렉토리에 들어가고 모든 파일 이름과 파일 내용을 가져 와서 dict에 저장하는 함수를 만들고 싶습니다. 따라서 최종 결과는 다음과 같습니다.

({'alex.txt', '100'}, {'mark.txt', '400'}) 

대용량 파일의 경우이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

당신이에 내려해야하는 하위 디렉토리가 (mgilson를 통해) ? – tMC

+0

@tMC - 아니요, 없습니다. – user1447941

답변

6

이 그들이있는 경우도 하위 디렉토리로 재귀 적 os.walk

d = {} 
for path,dirs,fnames in os.walk(top): 
    for fname in fnames: 
     visit = os.path.join(path,fname) 
     with open(visit) as f: 
      d[visit] = f.read() 

이 솔루션을 위해 좋은 일처럼 보인다.

2

사전을 사용하면 이동하는 것처럼 보입니다.

os.listdir을 사용하면 directory에있는 파일 목록을 가져올 수 있습니다. 그런 다음 파일을 반복하고 각 파일을 열고 입력을 읽고 사전에 저장하십시오.

main 디렉토리에 하위 디렉토리가있는 경우 os.walk 함수를 사용하여 재귀 적으로 처리 할 수 ​​있습니다. 그렇지 않으면 os.listdir에 붙어 있습니다.

os.listdir의 항목은 main을 기준으로합니다. 파일을 열기 전에 main에 경로를 추가 할 수 있습니다. 이 경우 os.path.join(path_to_main, f)을 사용하십시오. 여기서 fos.listdir입니다.

1
import os 
bar = {} 
[bar.update({i: open(i, 'r').read()}) for i in os.listdir('.')] 

또는

bar = dict((i,open(i).read()) for i in os.listdir('.')) 
+1

os.listdir ('.')에서'bar = dict ((i, open (i). – mgilson

+0

또는 os.listdir ('.')}에있는 i에 대해 bar = {i : open (i) .read()와 유사한 dict-comprehension. 부작용에 대한 목록 이해는 부실한 스타일로 간주됩니다. 마지막으로, 이것은 py3k만이 아닙니다 ... 왜 py2k에서도 작동하지 않는 이유는 모르겠습니다. – mgilson

+0

파이썬 2.7에서 테스트했습니다 .- 목록 이해력입니다. 독해력이 아님 – tMC

관련 문제