python true 나는 os.walk 권리를 이해합니까?



python3 chmod (4)

간단히 말해서 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(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 pprint
import os
pp=pprint.PrettyPrinter(indent=4)
for dir_tuple in os.walk("/root"):
    pp.pprint(dir_tuple)

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


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

다음은 os.walk() 가 몇 가지 os 함수를 사용하여 몇 가지 설명과 함께 작동하는 방법에 대한 간단한 예입니다.

먼저 os.walk() 는 루트 디렉토리, 현재 루트 바로 아래에있는 디렉토리 목록 ( dirs ) 및 해당 디렉토리에서 발견 된 파일 목록의 세 가지 항목을 반환합니다. 이 os.walk() 는 자세한 정보를 제공합니다.

dirs 에는 루트 디렉토리 바로 아래에 디렉토리 목록이 포함되며 파일에는 해당 디렉토리에서 발견 된 모든 파일 목록이 포함됩니다. 다음 반복에서는 이전 dirs 목록의 각 디렉토리가 차례로 root 역할을 수행하며 검색은 현재 레벨이 검색된 후에 만 ​​레벨을 내려가며 계속됩니다.

A 코드 예제 : 지정된 검색 디렉토리 (루트) 아래의 .jpg.gif 파일 이름을 검색, 계산 및 인쇄합니다. 또한 os.path.splitext() 함수를 사용하여 파일의 기반을 확장자와 분리하고 os.path.join() 함수를 사용하여 찾은 이미지 파일의 경로를 포함한 전체 이름을 제공합니다.

import os

searchdir = r'C:\your_root_dir'  # your search starts in this directory (your root) 

count = 0
for root, dirs, files in os.walk(searchdir):
    for name in files:
        (base, ext) = os.path.splitext(name) # split base and extension
        if ext in ('.jpg', '.gif'):          # check the extension
            count += 1
            full_name = os.path.join(root, name) # create full path
            print(full_name)

print('\ntotal number of .jpg and .gif files found: %d' % count)




file