2011-03-31 3 views
1

우리는 여러 개의 리눅스 서버를 가지고 있는데, 나는 특정 리눅스 서버에서 파일과 디렉토리의 모든 세부 사항을 얻고 싶다. os.walk 기능으로이 작업을 수행 할 수 있지만 단일 파일 정보 만 저장한다는 것을 알고 있습니다. 당신은 파일에 추가보다는 (파일 내용 당신이 그것을 열 때마다 재설정하는) 그것을 작성해야 아래의 코드를 사전리눅스에서 os.walk 반복하기

답변

6

당신은 컨텍스트 관리자를 사용할 수

import os 
with open('/home/david/Desktop/datafile.txt', 'w') as F: 
    for d in os.walk('/'): 
     F.write(str(d) + '\n') 
4

에서

import os 
for d in os.walk('/'): 
    F = open('/home/david/Desktop/datafile.txt', 'w') 
    F.write(str(d) + '\n') 
    F.close() 

감사를 찾아주세요. 추가 모드를 사용하려면 w 대신 a을 전달하십시오.

그러나, 그렇게 할 필요가 없습니다 - 단순히하면 파일 을 열고 쓰기보다는 파일마다 루프 반복을 처리 재 개방 유지 (즉, 시간의 엄청난 낭비!).

F = open('/home/david/Desktop/datafile.txt', 'w') 
for d in os.walk('/'): 
    F.write(str(d) + '\n') 
F.close() 

당신은 또한 당신을 위해 close()을 자동화하는 with -statement를 사용할 수 있습니다.

with open(...) as F: 
     for d in .. 
     ... 
2

각 반복 내에서 동일한 파일을 재생성하는 것은 의미가 없습니다. open()을 루프 밖으로 이동하거나 append-mode 'a'를 사용하여 루프 내에서 파일을 다시 엽니 다.

2

파일 쓰기가 추가되지 않아 하나의 항목 만 가져오고 있으며 처음부터 파일을 만듭니다.

또한 os.walk()에 대한 설명서를 참조하십시오. 방문한 각 폴더에있는 파일의 목록이 제공됩니다 :

import os 
f=file(r'/home/david/Desktop/datafile.txt', 'a') # <---- Note "a" 
for root, files, dirs in os.walk('/'): 
    f.write('Currently in: ' + root + '\n') 
    f.write(' '*4 + 'Files:\n') 
    for ff in files: 
     f.write(' '*8 + ff + '\n') 
    f.write(' '*4 + 'Folders:\n') 
    for ff in dirs: 
     f.write(' '*8 + ff + '\n')