파일 경로
경로를 다루기 위해서는 os 모듈이 필요하다.
import os
현재폴더의 경로 확인하기
os.getcwd()
or
%pwd
'C:\\Users\\user\\Desktop\\수업자료\\2차'
현재폴더에 있는 모든 파일목록 출력하기
os.listdir()
['.ipynb_checkpoints',
'01 for_while문.ipynb',
'if 실습 문제.ipynb',
'images',
'pic1.jpg',
'pic2.jpg',
'pic3.jpg',
'seoul.csv',
'test',
'미션_기상청데이터.ipynb',
'미션_이미지처리.ipynb',
'실습_기상청데이터.html',
'이미지정보.csv']
os.chdir로 폴더의 경로를 변경할 수 있다.
os.chdir("C:\\Users\\user\\Desktop\\수업자료\\2차\\images")
즉, 현재 폴더는 images가 되었다.
현재 경로의 파일 목록을 확인해보면 아래와 같다.
os.listdir()
['강아지1.jpg',
'강아지10.jpg',
'강아지2.jpg',
'강아지3.jpg',
'강아지4.jpg',
'강아지5.jpg',
'강아지6.jpg',
'강아지7.jpg',
'강아지8.jpg',
'강아지9.jpg',
'고양이1.jpg',
'고양이2.jpg',
'고양이3.jpg',
'고양이4.jpg',
'고양이5.jpg',
'고양이6.jpg']
상대경로, 절대경로
현재 경로가 절대경로로 되어있기때문에 복잡해 보인다.
상대경로로 바꿔주면 보기가 쉬운것 같아서 왠만하면 상대경로로 바꿔준다!
절대경로: "C:\\Users\\user\\Desktop\\수업자료\\2차\\images"
# 상대경로
path='./images/'
잊지말고 '/' 붙이기!
이렇게 바꿀때 마지막에 '/'를 안붙이면 피곤해질 수 있다고 한다..
이미지 불러오기
이미지를 다루기 위해서 pillow가 필요하다.
pip install pillow
from PIL import Image
아래의 코드를 실행하면 해당 사진파일이 실행된다.
img = Image.open("강아지1.jpg")
img.show()
아래의 코드를 실행하면 사진의 정보를 알 수 있다.
print(f'이미지 파일 이름 : {img.filename}')
print(f'이미지 파일형식(format) : {img.format}')
print(f'이미지 용량(size) : {img.size}')
print(f'이미지 색상모드 : {img.mode}')
print(f'이미지 width : {img.width}')
print(f'이미지 height : {img.height}')
이미지 파일 이름 : 강아지1.jpg
이미지 파일형식(format) : JPEG
이미지 용량(size) : (377, 400)
이미지 색상모드 : RGB
이미지 width : 377
이미지 height : 400
미션
강아지 폴더와 고양이 폴더를 만들어 이름에 따라 파일을 분류해서 저장하기
os.listdir()
['강아지1.jpg',
'강아지10.jpg',
'강아지2.jpg',
'강아지3.jpg',
'강아지4.jpg',
'강아지5.jpg',
'강아지6.jpg',
'강아지7.jpg',
'강아지8.jpg',
'강아지9.jpg',
'고양이1.jpg',
'고양이2.jpg',
'고양이3.jpg',
'고양이4.jpg',
'고양이5.jpg',
'고양이6.jpg']
' . '을 기준으로 문자 나누기
'강아지1.jpg'.split('.')
' . '을 기준으로 문자 나눈것 중 첫번째
'강아지1.jpg'.split('.')[0]
숫자를 기준으로 문자 나누기
re.split('[0-9]','강아지123.jpg')
['강아지', '', '', '.jpg']
'[0-9]'를 해도 되지만 '+'를 붙이면 하나이상의 숫자를 기준으로 분리가 된다.
re.split('[0-9]+','강아지123.jpg')
['강아지', '.jpg']
문자 분리 예시
test='가나다 abc ABC ㄱㄴㄷ ^*,!! 12 3435'
re.findall('[a-zA-Z가-힣0-9]+',test)
['가나다', 'abc', 'ABC', '12', '3435']
강아지, 고양이 폴더 생성하기
가지고있는 사진 파일명으로 각각의 폴더를 만들어 주었다.
path='./images/'
file_list= os.listdir(path)
new_fold=[]
tmp=''
cat=[]
for i in file_list:
fn=re.split('[0-9]+',i)[0]
if fn!=tmp:
os.mkdir(path+fn)
new_fold.append(fn)
tmp=fn
print(new_fold)
from PIL import Image
모든 사진에 모든 필터를 적용해서 각 이름에 맞는 폴더에 저장하기
filter_list = [ImageFilter.BLUR, ImageFilter.CONTOUR, ImageFilter.DETAIL,
ImageFilter.EDGE_ENHANCE, ImageFilter.EDGE_ENHANCE_MORE, ImageFilter.EMBOSS, ImageFilter.FIND_EDGES,
ImageFilter.SHARPEN, ImageFilter.SMOOTH, ImageFilter.SMOOTH_MORE]
for i in file_list:
img=Image.open("C:/Users/user/Desktop/수업자료/2차/images/{}".format(i))
fn=re.split('[0-9]+',i)[0]
sp=i.split('.')[0]
for i in range(len(filter_list)):
filter_img = img.filter(filter_list[i])
if fn=='강아지':
filter_img.save("C:/Users/user/Desktop/수업자료/2차/images/강아지/{}_filter_img_{}.jpg".format(sp,i))
elif fn=='고양이':
filter_img.save("C:/Users/user/Desktop/수업자료/2차/images/고양이/{}_filter_img_{}.jpg".format(sp,i))
결과!
'데이터 이해하기 > 데이터 다루기' 카테고리의 다른 글
파이썬 csv파일 다루기(읽기, 쓰기, 수정, 추가) (0) | 2022.07.29 |
---|---|
!mkdir(폴더 생성하기), !wget(데이터 불러오기) (0) | 2021.11.29 |
[데이터 수집] 공공데이터 API - Requests, Beautiful Soup 사용하기 (0) | 2021.11.19 |
집합 자료형 차집합 difference(), 합집합 union() , 교집합 intersection(() (0) | 2021.11.01 |
apply(), lambda() (0) | 2021.11.01 |