일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Jupyter Notebook
- virtualenv
- xception
- os 모듈
- Astrous Convolution
- deeplab
- os path join
- VS Code
- Convolution
- exif
- os path isfile
- comprehension
- rotate
- 파이썬 디렉토리
- ipykernel
- exif orientation
- os path isdir
- Visual Studio Code
- 디렉토리
- Semantic segmentation
- Python
- ASPP
- 이미지 회전
- Deep Learning
- os listdir
- 이미지 반전
- 개발환경
- orientation
- 파이썬
- ipynb
- Today
- Total
어쩌다 딥러닝 연구원
Python OS 모듈 : 실무 코드로 알아보는 활용 예 본문
os 모듈을 잘 모르는 분들께 도움이 될 코드들이다. 남들이 이미 다 써놓은 os 모듈 글을 왜 쓰냐는 질문이 들어올 것 같은 자의식과잉 환자로써 말하자면, 개발일지 겸사겸사 쓰는 글이라고 봐 주시면 감사하겠다.
최근 신경망에 학습시킬 데이터를 분류하는 작업을 주로 해왔기 때문에 이 글을 쓰게 되었다.
os모듈의 함수들을 잘 활용하면 파일들을 일괄적으로 다루는 데 도움이 많이 된다.
os.listdir(directory_path) 함수는 디렉토리 내의 파일명, 폴더명을 모두 얻어온다.
예를 들어 directory path가 절대 경로가 /home/A 라는 폴더의 위치이고 A라는 폴더 안에 x라는 폴더가 있고 y.jpg라는 파일이 있다면
얻어지는 리스트는 ['x','y.jpg']인 것이다.
os.listdir 함수를 사용하였을 때 파일이든 폴더든 경로 전체가 아닌 이름만 반환되는 것이 문제이기 때문에 절대경로를 완성시키기 위해서는 두 가지 방법을 사용한다.
1.os.path.join 함수 사용
함수 사용은 간단하다.
/home/라는 디렉토리가 있고
그 아래 a 라는 폴더가 있으면
os.path.join('/home/','a') 의 값은
'/home/a' 가 된다.
물론 , 또 그아래 b 라는 폴더가 있으면
os.path.join('/home/','a','b') 처럼 사용하면 된다. 아무튼, 코드를 보고 이해해 보자.
필자가 업무에 직접 활용한 코드이다.
import os
target_dir='대충 폴더 디렉토리'
"""
필자의 경우 데이터 디렉터리 구조가 날짜별, id별로 되어있음을 미리 밝힌다.
"""
for date in os.listdir(target_dir):
datepath=os.path.join(target_dir,date)
for each_id in os.listdir(datepath):
date_id_path=os.path.join(datepath,each_id)
for filename in os.listdir(date_id_path):
filepath=os.path.join(date_id_path)
if os.path.isfile(filepath):
rotate(filepath)
for문을 이용해 디렉터리를 하나하나 파헤치면 된다.
중간에 파일이 껴있는 경우는 어떻게 하는가에 대해서는 아래의 방법에 포함되어있다.
2.list comprehension 사용
아까의 예를 다시 가져오자면, target_dir의 값은 '/home/hanshangom/a/' 가 되는 것이고
datefolders의 값은 ['/home/hanshangom/a/x', '/home/hanshangom/a/y.jpg'] 가 되는 것이다.
폴더만 연달아 참조하고 싶을 때 comprehension을 사용할 줄 안다면 다음과 같은 코드를 참고하여 이해하면 좋다.
추가로, os.path.isfile/os.path.isdir 함수는 각각 파일인지/디렉토리인지 경로를 보고 판단하는 함수이다.
import os
import os
target_dir=os.getcwd()+'/' #현재 작성중인 코드 파일의 위치
#파일 디렉토리 상관없이 경로 얻어오기
datefolders=[target_dir+folder_name for folder_name in os.listdir(target_dir)]
#디렉토리 경로만 얻어오기
datefolders=[target_dir+folder_name for folder_name in os.listdir(target_dir) if not os.path.isfile(target_dir+folder_name) ]
datefolders=[target_dir+folder_name for folder_name in os.listdir(target_dir) if os.path.isdir(target_dir+folder_name) ]
#파일 경로만 얻어오기
files=[target_dir+folder_name for file_name in os.listdir(target_dir) if os.path.isfile(target_dir+file_name) ]
files=[target_dir+folder_name for file_name in os.listdir(target_dir) if not os.path.isdir(target_dir+file_name) ]
조금 naive 한 방법으로는 이런 식의 코드가 있다. 이건 필자가 왜 썼는지 기억이 나지 않으니 넘어가자.
abnormal=[]
folders=[os.getcwd()+'/data/skin_0305_0306/']
for folder in folders:
for each_id in os.listdir(folder):
if len(each_id)>4 and each_id[-4]=='.':
continue
for filename in os.listdir(folder+'/'+each_id):
path=folder+'/'+each_id+'/'+filename
rotate(path)
글이 유용했다면, 하트를 눌러주면 감사하겠다.
반쯤 반말체라 기분이 나쁘셨다면 죄송합니다. 아무튼 하트를 눌러주시면 감사하겠습니다!
그럼 제가 기분이 조크등요
'개발' 카테고리의 다른 글
how to solve pytorch inference slow problem on windows 10 (0) | 2021.01.13 |
---|---|
exif를 참조하여 반전/회전된 이미지 돌려놓기 (0) | 2020.03.07 |
DeepLab V3 이해를 위한 이정표 (0) | 2020.02.28 |
Visual Studio code에서 Jupyter Notebook 사용하기 in Ubuntu (3) | 2020.02.27 |