[Python Study] 026 day

2022. 2. 2. 18:44
1
2
print("Python study 026 day")
#2022. 2. 1.Tue
cs
Python study 026 day
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
 
def search(dirname):
    try:
        filenames = os.listdir(dirname)
        for filename in filenames:
            full_filename = os.path.join(dirname, filename)
            if os.path.isdir(full_filename):
                search(full_filename)
            else :
                ext = os.path.splitext(full_filename)[-1]
                if ext == '.py':
                    print(full_filename)
    except PermissionError:
        pass
 
search("/Users")
cs

os.listdir을 이용하면 해당 디렉터리에 있는 파일들의 리스트를 구할 수 있다.

os 모듈에는 디렉터리와 파일명을 이어주는 os.path.join 이라는 함수가 있으므로 이 함수를 이용하여 디렉터리를 포함한 전체 경로를 쉽게 구할 수 있다.

파일명에서 확장자만 추출하기 위해 os 모듈의 os.path.splitext 함수를 사용한다. 파일명을 확장자를 기준으로 두 부분으로 나누어 준다.

따라서 os.path.splitext(full_filename)[-1]은 해당 파일의 확장자명이 된다.

 

try ... except PermissionError로 함수 전체를 감싼 이유는 os.listdir 수행 시 권한이 없는 디렉터리에 접근하더라도 프로그램이 오류로 종료되지 않고 그냥 수행되도록 하기 위해서이다.

 

os.path.isdir 함수를 이용하여 full_filename이 디렉터리인지 파일인지 구분한다. 디렉터리일 경우 다시 해당 경로를 입력받아 search 함수를 호출하도록 함. 재귀 호출의 경우이다.

/Users/janghan/Desktop/Programming/Eclipse.app/Contents/Eclipse/plugins/org.apache.ant_1.10.12.v20211102-1452/bin/runant.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/gyp_main.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_sln.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/graphviz.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_gyp.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
/Users/jangh

등의 .py의 확장자를 가진 많은 파일...

 

아래는 위의 코드와 다르게 os.walk를 이용하여 보다 간편한 코드로 작성하였다.

os.walk는 시작 디렉터리부터 시작하여 그 하위의 모든 디렉터리를 차례대로 방문하게 해주는 함수이다.

 

1
2
3
4
5
6
7
import os
 
for (path, dir, files) in os.walk("/Users/"):
    for filename in files:
        ext = os.path.splitext(filename)[-1]
        if ext == '.py':
            print("%s/%s"%(path, filename))
cs
/Users/janghan/setup.py
/Users/janghan/Desktop/Programming/Eclipse.app/Contents/Eclipse/plugins/org.apache.ant_1.10.12.v20211102-1452/bin/runant.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/gyp_main.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/gyptest.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/setup.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/PRESUBMIT.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_sln.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/graphviz.py
/Users/janghan/Desktop/Programming/Atom.app/Contents/Resources/app/apm/node_modules/node-gyp/gyp/tools/pretty_gyp.py​

등의 .py의 확장자를 가진 많은 파일...

 

'Programming > Python' 카테고리의 다른 글

[Python Study] 025 day  (0) 2022.02.01
[Python Study] 024 day  (0) 2022.01.29
[Python Study] 023 day  (0) 2022.01.29
[Python Study] 022 day  (0) 2022.01.29
[Python Study] 021 day  (0) 2022.01.29

BELATED ARTICLES

more