true - python3 chmod




나는 os.walk 권리를 이해합니까? (3)

os.walk는 위와 약간 다르게 작동합니다. 기본적으로 (경로, 디렉토리, 파일)의 튜플을 반환합니다. 이를 확인하려면 다음을 시도하십시오.

import pprint
import os
pp=pprint.PrettyPrinter(indent=4)
for dir_tuple in os.walk("/root"):
    pp.pprint(dir_tuple)

... 루프의 각 반복은 디렉토리 이름을 인쇄하고, 그 디렉토리 내의 모든 디렉토리의 이름을 나열하고, 그 디렉토리 내의 모든 파일 목록을 인쇄합니다. 그런 다음 os.walk은 원래 루트의 모든 하위 디렉토리가 통과 될 때까지 하위 디렉토리 목록의 각 디렉토리를 입력하고 동일한 작업을 수행합니다. 이것이 어떻게 작동 하는지를 알기 위해 재귀에 대해 조금 배우는 것이 도움이 될 수 있습니다.

os.walk(startdir) 있는 root, dir, file의 루프가 다음 단계를 통해 작동합니까?

for root in os.walk(startdir) 
    for dir in root 
        for files in dir
  1. 시작 디렉토리의 루트를 얻습니다 : C : \ dir1 \ dir2 \ startdir

  2. C : \ dir1 \ dir2 \ startdir에 폴더를 가져 와서 "dirlist"폴더 목록을 반환합니다.

  3. 첫 번째 dirlist 항목의 파일을 가져 와서 "filelist"파일 목록을 파일 목록의 첫 번째 항목으로 반환합니다.

  4. dirlist의 두 번째 항목으로 이동하고이 폴더 "filelist2"에있는 파일 목록을 파일 목록 목록의 두 번째 항목으로 반환합니다. 기타

  5. foldertree에서 다음 루트로 이동하고 2.에서 시작하십시오.

권리? 또는 모든 루트를 먼저 얻은 다음 모든 dirs를 두 번째로 만들고 모든 파일을 세 번째로 얻는가?


간단히 말해서 os.walk ()는 주어진 경로에 존재하는 경로, 폴더, 파일의 튜플을 생성하고 하위 폴더를 계속 트래핑합니다.

import os.path
path=input(" enter the path\n")
for path,subdir,files in os.walk(path):
   for name in subdir:
       print os.path.join(path,name) # will print path of directories
   for name in files:    
       print os.path.join(path,name) # will print path of files

이렇게하면 하위 디렉토리에있는 모든 하위 디렉토리, 파일 및 파일의 경로가 생성됩니다.


os.walk 는 값의 튜플 (current_path, current_path의 디렉토리, current_path의 파일)을 생성하는 생성자를 반환합니다.

생성기가 호출 될 때마다, 호출 된 초기 디렉토리에서 더 이상의 서브 디렉토리를 사용할 수 없을 때까지 각 디렉토리를 반복적으로 따라갈 것입니다.

이와 같이,

os.walk('C:\dir1\dir2\startdir').next()[0] # returns 'C:\dir1\dir2\startdir'
os.walk('C:\dir1\dir2\startdir').next()[1] # returns all the dirs in 'C:\dir1\dir2\startdir'
os.walk('C:\dir1\dir2\startdir').next()[2] # returns all the files in 'C:\dir1\dir2\startdir'

그래서

import os.path
....
for path, directories, files in os.walk('C:\dir1\dir2\startdir'):
     if file in files:
          print 'found %s' % os.path.join(path, file)

아니면 이거

def search_file(directory = None, file = None):
    assert os.path.isdir(directory)
    for cur_path, directories, files in os.walk(directory):
        if file in files:
            return os.path.join(directory, cur_path, file)
    return None

또는 파일을 찾으려면 다음을 수행 할 수 있습니다.

import os
def search_file(directory = None, file = None):
    assert os.path.isdir(directory)
    current_path, directories, files = os.walk(directory).next()
    if file in files:
        return os.path.join(directory, file)
    elif directories == '':
        return None
    else:
        for new_directory in directories:
            result = search_file(directory = os.path.join(directory, new_directory), file = file)
            if result:
                return result
        return None






file