source

Python을 사용한 디렉토리 반복

factcode 2022. 9. 28. 00:06
반응형

Python을 사용한 디렉토리 반복

지정된 디렉토리의 하위 디렉토리를 반복하여 파일을 검색해야 합니다.파일을 받으면 파일을 열고 내용을 변경하여 내 행으로 바꿔야 합니다.

이거 해봤어요.

import os

rootdir ='C:/Users/sid/Desktop/test'

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        f=open(file,'r')
        lines=f.readlines()
        f.close()
        f=open(file,'w')
        for line in lines:
            newline = "No you are not"
            f.write(newline)
        f.close()

에러가 납니다.내가 뭘 잘못하고 있지?

디렉토리내의 실제의 워크는, 코드화한 대로 동작합니다.내부 루프의 내용을 단순하게 대체하면print스테이트먼트에서는, 각 파일이 검색되고 있는 것을 확인할 수 있습니다.

import os
rootdir = 'C:/Users/sid/Desktop/test'

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        print(os.path.join(subdir, file))

위 실행 시 오류가 계속 발생할 경우 오류 메시지를 제공하십시오.

하위 디렉토리의 모든 파일을 반환하는 또 다른 방법은 Python 3.4에 소개된 모듈을 사용하는 것입니다. 이 모듈은 파일 시스템 경로를 처리하는 객체 지향적 접근 방식을 제공합니다(Pathlib은 PyPi의 pathlib2 모듈을 통해 Python 2.7에서도 사용할 수 있습니다).

from pathlib import Path

rootdir = Path('C:/Users/sid/Desktop/test')
# Return a list of regular files only, not directories
file_list = [f for f in rootdir.glob('**/*') if f.is_file()]

# For absolute paths instead of relative the current dir
file_list = [f for f in rootdir.resolve().glob('**/*') if f.is_file()]

Python 3.5 이후,glob모듈은 재귀 파일 검색도 지원합니다.

import os
from glob import iglob

rootdir_glob = 'C:/Users/sid/Desktop/test/**/*' # Note the added asterisks
# This will return absolute paths
file_list = [f for f in iglob(rootdir_glob, recursive=True) if os.path.isfile(f)]

file_list네스트 루프 없이 반복할 수 있습니다.

for f in file_list:
    print(f) # Replace with desired operations

python > = 3.5 이상에서는 다음을 사용할 수 있습니다.**, 그리고 그것은 가장 버마적인 해결책으로 보인다.

import glob, os

for filename in glob.iglob('/pardadox-music/**', recursive=True):
    if os.path.isfile(filename): # filter dirs
        print(filename)

출력:

/pardadox-music/modules/her1.mod
/pardadox-music/modules/her2.mod
...

주의:

  1. 지구본.iglob

    glob.iglob(pathname, recursive=False)

    다음과 같은 값을 생성하는 반복기를 반환합니다.glob()동시에 저장하지 않아도 됩니다.

  2. 재귀적인 경우True, 패턴'**'모든 파일과 0 이상 일치합니다.directories그리고.subdirectories.

  3. 디렉토리에 다음 문자로 시작하는 파일이 포함되어 있는 경우.기본적으로는 일치하지 않습니다.예를 들어, 다음과 같은 디렉토리가 있다고 가정해 보겠습니다.card.gif그리고..card.gif:

    >>> import glob
    >>> glob.glob('*.gif') ['card.gif'] 
    >>> glob.glob('.c*')['.card.gif']
    
  4. 를 사용할 수도 있습니다.rglob(pattern)(이것은, 콜과연,glob()와 함께**/지정된 상대 패턴 앞에 추가됩니다.

언급URL : https://stackoverflow.com/questions/19587118/iterating-through-directories-with-python

반응형