목차
1. 주제 소개
생활 속에서 파이썬을 활용하는 사례를 소개하려 한다.
여행을 한번 다녀 오면 많게는 수천 장의 사진을 찍어 오게 된다.
추억을 남기기 위해서 앨범을 하나 만들고 싶은데, 모든 사진을 인화할 수는 없으니 그 중에서 마음에 드는 사진을 골라야 한다.
그런데 여행을 함께 다녀 온 친구가 있다면 내 마음대로 고를 수는 없고 친구와 함께 골라야 한다
같이 자리에 앉아서 고르면 좋겠지만, 그럴 여건이 안 되어 각자 마음에 드는 사진을 고른 다음 서로 겹치는 사진을 인화하기로 하고, 각자 마음에 드는 사진들을 서로 다른 폴더에 모았다고 하자.
이때, 친구와 내가 모두 고른 사진을 추려내는 작업을 파이썬으로 해보자.
2.파일 목록 가져오기
친구와 내가 고른 파일 목록을 비교하려면, 먼저 파일 목록을 불러와야 할 것이다.
사진 파일들은 아래와 같이 D드라이브 내 2개의 폴더에 저장되어 있다고 가정한다.
D:/내사진
D:/친구사진
폴더 내의 파일 목록을 가져오려면 os 패키지의 listdir() 함수를 사용하면 된다.
아래와 같이 코드를 작성하면 me와 friend에 각각의 파일 목록이 저장된다.
from os import listdir
me = listdir("D:/내사진")
friend = listdir("D:/친구사진")
3. 파일 목록 간에 겹치는 항목 뽑아내기
이제 두 목록을 비교해 친구와 내가 모두 고른 사진을 뽑아내 보자.
여러 가지 방법이 있겠는데, 그 중에 두 가지를 소개한다.
3.1. in 연산자를 이용하는 방법
우리가 위에서 추출한 파일 목록은 파이썬 리스트 형태이다.
리스트에 어떤 항목이 있는지 없는지는 in 연산자를 이용해 확인할 수 있다.
>>> a = [1, 2, 3]
>>> 1 in a
True
in 연산자는 항목별로만 검사할 수가 있고, 여러 항목을 동시에 검사하지는 못한다. 아래의 예를 보면 1과 2는 리스트 a에 있지만, 리스트 [1, 2]가 a에 있는지 검사해 보면 항목별로 검사하는 것이 아니라 그 리스트 자체가 a의 요소 중에 있는지를 검사하기 때문에 False가 출력된다.
>>> a = [1, 2, 3]
>>> [1, 2] in a
False
따라서 두 리스트의 항목들 중에서 겹치는 항목을 모두 뽑아 내려면, 반복문을 이용해서 항목별로 검사를 해줘야 한다.
예제의 me와 friend 리스트의 비교는 아래와 같이 리스트 컴프리헨션을 이용하면 한줄로 해결할 수 있다.
[i for i in me if i in friend]
위 코드가 이해되지 않는다면 리스트컴프리헨션에 관한 아래 게시글을 읽어보기 바란다.
파이썬에서 코드 한줄로 리스트(딕셔너리, 집합, 제너레이터) 만들기/리스트컴프리헨션, list comprehension
3.2. set()와 & 연산자를 이용하는 방법
위에 소개한 리스트컴프리헨션도 충분히 간단하긴 하지만, 리스트컴프리헨션은 가독성이 떨어진다며 싫어하는 사람들이 많다.
대신 리스트를 집합(set)으로 변환해주면, & 연산자를 이용해 말그대로 교집합을 바로 구할 수 있다.
코드는 다음과 같다.
set(me) & set(friend)
이렇게 하면 내사진 폴더와 친구사진 폴더의 교집합이 바로 계산되어 출력된다.
이렇게 친구와 내가 모두 고른 사진의 목록을 구해낸 다음에는 shutil 등 파일을 이동하거나 복사할 수 있는 패키지를 이용하면 인화할 사진들만 뽑아내 따로 저장할 수도 있다.
나름대로 파이썬을 간단히 활용해볼 만한 과제라는 생각이 들어 소개하게 되었는데 소개글을 다 써놓고 보니 더 쉬운 방법이 떠올랐다.
친구사진 폴더에 있는 사진을 전부 복사해서 내사진 폴더에 붙여넣기 하면, 중복되는 사진들에는 "- 복사본" 표시가 붙을 테니 해당 표시가 붙은 사진만 뽑아내면 될 것 같다.
"망치를 든 사람에게는 모든 문제가 못으로 보인다."라는 근래에 새로 알게 된 격언이 떠오르긴 하지만, 어쨌든 망치 쓰는 데에 더 익숙해질 수 있다면 나름대로 도움이 될 것 아닌가 싶기도 하다.
'코딩 > Python' 카테고리의 다른 글
공공데이터포털 API 활용해 부동산 실거래가 데이터 가져오기/파이썬에서 xml 데이터 처리하는 방법 (0) | 2022.05.01 |
---|---|
파이썬 함수 실행 속도를 1000배 빠르게 해주는 모듈/functools, cache 데코레이터,재귀함수, 피보나치 수열 (0) | 2022.04.23 |
ipython shell(터미널, 쉘)에서 작성한 코드를 파이썬 스크립트로 바꾸기/ipython 매직커맨드 (0) | 2022.01.29 |
쉘(터미널, 커맨드라인)에서 파이썬 코드 자동 완성(추천)하는 방법/IPython (0) | 2022.01.18 |
파이썬으로 구글 애드센스(AdSense) 수익 스마트폰 알림 기능 구현하기 (0) | 2022.01.07 |
댓글