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
...
주의:
-
glob.iglob(pathname, recursive=False)
다음과 같은 값을 생성하는 반복기를 반환합니다.
glob()
동시에 저장하지 않아도 됩니다. 재귀적인 경우
True
, 패턴'**'
모든 파일과 0 이상 일치합니다.directories
그리고.subdirectories
.디렉토리에 다음 문자로 시작하는 파일이 포함되어 있는 경우
.
기본적으로는 일치하지 않습니다.예를 들어, 다음과 같은 디렉토리가 있다고 가정해 보겠습니다.card.gif
그리고..card.gif
:>>> import glob >>> glob.glob('*.gif') ['card.gif'] >>> glob.glob('.c*')['.card.gif']
를 사용할 수도 있습니다.
rglob(pattern)
(이것은, 콜과연,glob()
와 함께**/
지정된 상대 패턴 앞에 추가됩니다.
언급URL : https://stackoverflow.com/questions/19587118/iterating-through-directories-with-python
'source' 카테고리의 다른 글
팬더 데이터 프레임을 NumPy 어레이로 변환 (0) | 2022.09.29 |
---|---|
MySQL 및 PHP - 빈 문자열 대신 NULL을 삽입합니다. (0) | 2022.09.29 |
PHP는 클래스 이름에서 개체를 문자열로 인스턴스화할 수 있습니까? (0) | 2022.09.28 |
int를 부호 없는 바이트로 변환하고 되돌리는 방법 (0) | 2022.09.28 |
기본 키가 자동으로 증가하는 MySQL에 데이터를 삽입하려면 어떻게 해야 합니까? (0) | 2022.09.28 |