[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 |