반응형

※ 윈도우OS 환경에서 파이썬과 주피터랩 개발 환경을 셋팅하고 이를 기록하기 위한 용도임

1. miniconda 설치

- anaconda 또는 minicodna 아무거나 설치해도 무방하나, anaconda는 기본적인 파이썬 패키지를 같이 설치해서 사용할 수 있게 해주고, miniconda는 필수적인 패키지만 설치해서 사용함. conda는 패키지와 파이썬 버전에 맞게 환경 구성을 해주는 점이 좋음

- 여기서는 miniconda를 설치하여 사용하는데, 어차피 용도에 맞게 가상환경(virtual environment)를 만들어서 많이 사용하기 때문에 필수구성만 설치하고 파이썬 프로그램에 맞는 가상환경을 새로 만들어서 파이썬 패키지를 설치해서 사용한다.

- 윈도우 기반 miniconda 설치 웹사이트(아래). 파이썬 버전과 윈도우OS에 맞는 설치파일을 다운로드 받아서 설치한다. 거의 기본 세팅으로 설치하면 되는데 "Advanced Option"에서 모든 체크박스를 체크하고 설치한다. ^^;a

https://docs.conda.io/en/latest/miniconda.html#windows-installers

 

Miniconda — conda documentation

Miniconda is a free minimal installer for conda. It is a small, bootstrap version of Anaconda that includes only conda, Python, the packages they depend on, and a small number of other useful packages, including pip, zlib and a few others. Use the conda in

docs.conda.io

2. 파이썬 가상환경 설정

- miniconda를 설치하면 기본적인 파이썬은 설치되고 사용할 수 있는 환경은 준비된다. 새로 설치된 프로그램 중 "Anaconda Prompt (miniconda3)" 바로가기를 실행한다. 정상적을 실행이 된다면 "(base) c:\miniconda\설치경로\"가 될 것임. "python"을 입력하면 설치된 파이썬 버전이 표시되면서 파이썬 프로그램을 실행할 수 있는 프롬프트가 동작한다.

- ctrl-Z 또는 Anaconda Prompt (miniconda3)를 새로 시작해서 (base) ~~인 프롬프트 상태로 만든다. 이제부터 가상환경 구성을 한다. 아래 명령어들을 순서대로 입력하면서 설치를 진행한다.

[콘다 버전 확인] : 그냥 해봄. 맞게 설치가 되었는지...
conda -–version

[콘다 업데이트] : conda는 (base) 환경에서 동작하는 것으로 이해함. 
conda update conda

[가상환경만들기] : (base)를 그대로 사용해도 되나, 여러 프로그램을 사용하게 되면 패키지별로 호환성이 문제가 될 수 있기 때문에 개발하는 프로그램에 맞는 가상환경을 구성해서 사용한다.
conda create -n <환경명> python=<버전(ex:3.5이나 3.7 등)>                                                                                        conda create -n koreait python=3.8 : koreait라는 가상환경을 새로 만들고 파이썬은 3.8을 사용한다.

[가상환경 목록] : 설치한 가상환경 목록을 보여준다.
conda env list

[가상환경 제거] : 가상환경을 삭제하는 경우
conda remove -n <name> --all                                                                                                                                        conda remove -n koreait --all

[가상환경 활성화] : 설치한 가상환경을 활성화 시켜준다. 활성화된 가상환경은 아래 그림처럼 * 표시가 생기고, (base) → (koreait)로 활성화된 가상환경 이름으로 변경된다. 이제부터는 활성화된 가상환경에서 conda 명령어를 입력한다.
conda activate koreait

[파이썬 패키지] : 개발하는데 필요한 패키지를 설치한다. 다음과 같이 이름만 입력하면 파이썬과 각 패키지에 맞는 버전을 골라서 자동으로 설치가된다. 특정 패키지가 필요하다면 "<패키지명>=<버전>"을 입력해서 따로 설치한다. 한개씩 설치해도 된다.
conda install numpy matplotlib tqdm bokeh scikit-learn scipy ipython cython pandas matplotlib seaborn 

왠만한 패키지는 conda를 통해 설치가 되는데, 몇몇 프로그램은 "pip" 명령어를 이용해서 설치한다. conda로 설치가 되지 않는다면 conda 대신에 pip를 이용해서 설치한다.

3. 주피터랩 설치

[콘다 - 주피터랩 설치] : 주피터랩을 설치한다. (주피터노트북도 동일하게 설치한다.)
conda install -c conda-forge jupyterlab

[콘다 패키지 업데이트] : 주피터랩을 실행하기 전에 만든 가상환경의 패키지를 업데이트해서 호환성 문제를 확인한다.
conda update --all

[주피터랩 실행] : miniconda가 설치된 폴더를 기본으로 보여주는 주피터랩이 실행이 된다.
jupyter lab

[주피터랩 시작 폴더 변경] : 주피터랩을 내가 원하는 폴더를 기본으로 해서 동작하고 싶은 경우가 있는 경우. Anaconda Prompt (miniconda3)를 새로 시작해서 (base) ~~인 프롬프트 상태에서 다음 명령어를 수행한다.
jupyter lab --generate-config

C:\Users\<PC명>\.jupyter 폴더 내에 "jupyter_lab_config.py" 파일이 생성된다. 파일에서 "c.ServerApp.notebook_dir"를 찾고 원하는 경로를 입력하고 저장한 후에 주피터랩을 다시 실행하면 입력한 경로가 기본으로 보여진다. # 표시는 삭제한다.
※ 입력한 경로로 시작하지 않는다면 '\\' 를 폴더 구분자로 사용한다.

# c.ServerApp.notebook_dir = '' → c.ServerApp.notebook_dir = 'D:\\02_my_code\\02_JupyterLabProject'

[콘다 가상환경 바로실행하기] : 매번 가상환경 실행과 주피터랩 실행하기가 번거로운 경우에 배치파일(.bat) 파일을 만들어서 명령어를 자동실행하게 할 수 있다. ".bat" 파일을 만들고 아래와 같이 입력한 후 저장하고 배치파일을 더블클릭하면 주피터랩까지 바로 실행이 된다. 


@echo off

cd "D:\02_my_code\02_JupyterLabProject\koreait" : 프로그램 경로 이동
call activate koreait : 가상환경 실행
call jupyter lab : 주피터랩 실행


 

반응형

※ 참조: 점프 투 파이썬 "https://wikidocs.net/14", 인터넷 검색 자료 기반 작성 자료.

자주 보기 위한 개인적인 참고용으로 만든 자료이며 자세하거나 다양한 쓰임은 링크 사이트를 참조 바랍니다.


1. 리스트 생성방법

아래와 같이 다양한 방법으로 리스트를 만들어서 사용할 수 있다.

a = []
a = list()
a = [1, 2, 3]
a = ['list', 'is', 'too', 'hard']
a = [1, 2, 'list', 'is'] 

초기값이 고정되어 있거나, 긴 배열 형태의 리스트를 만들고 싶은 경우

※ 참조: https://dojang.io/mod/page/view.php?id=2200

 

파이썬 코딩 도장: 10.1 리스트 만들기

Unit 10. 리스트와 튜플 사용하기 지금까지 변수에는 값을 한 개씩만 저장했습니다. 그럼 값을 30개 저장하려면 어떻게 해야 할까요? 다음과 같이 변수 30개에 값 30개를 저장하면 됩니다. a1 = 10 a2 = 20 # ... (생략) a29 = 60 a30 = 40 변수 30개를 일일이 타이핑하기는 쉽지 않습니다. 만약 저장할 값이 3,000개라면 정말 끔찍하죠? 이때는 리스트를 사용하면 편리합니다. 리스트는 말 그대로 목록이라는 뜻이며 값을 일

dojang.io

a = list(range(10))
a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

b = list(range(5, 12))
b
[5, 6, 7, 8, 9, 10, 11]

c = list(range(-4, 10, 2))
c
[-4, -2, 0, 2, 4, 6, 8]

d = list(range(10, 0, -1))
d
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

e = [x for x in range(0, 3)]
e
[0, 1, 2]

2. 이차원 리스트 생성방법

※ 참조: https://dojang.io/mod/page/view.php?id=2291

 

파이썬 코딩 도장: 23.1 2차원 리스트를 만들고 요소에 접근하기

Unit 23. 2차원 리스트 사용하기 리스트를 사용할 때 한 줄로 늘어선 1차원 리스트를 사용했는데 이번에는 평면 구조의 2차원 리스트를 사용해보겠습니다. 2차원 리스트는 다음과 같이 가로×세로 형태로 이루어져 있으며 행(row)과 열(column) 모두 0부터 시작합니다. ▼ 그림 23-1 2차원 리스트 23.1 2차원 리스트를 만들고 요소에 접근하기 2차원 리스트는 리스트 안에 리스트를 넣어서 만들 수 있으며 안쪽의 각 리스트는 ,(콤마)로 구분합니

dojang.io

a = [[0 for j in range(2)] for i in range(3)]
a
[[0, 0], [0, 0], [0, 0]]

3. 리스트와 튜플

리스트와 튜플은 동일한 형태를 갖고 있다. 표현식은 []와 ()로 다르다. 

# 리스트 to 튜플
a = list()
b = tuple(a)

# 튜플 to 리스트
a = tuple()
b = list(a)

 

4. 리스트 덧셈

- 연달아서 더하기

a = [1, 2, 3] 
b = ['a', 'b', 'c'] 
c = a + b
c
[1, 2, 3, 'a', 'b', 'c']

 

 

 

반응형

사용할 때마다 헷갈리는 부분이 있어서 매번 찾아 보다가 정리를 했습니다.

 

1. for 변수 in 리스트:

변수를 사용하게 되면 for 반복문이 동작하면서 변수를 사용하는데 이 변수에 리스트의 인자가 들어 가게 되고, 이 변수를 for 반복문 안에서 사용하게 된다. 변수가 숫자리스트라면 숫자가 변수에 들어가서 사용이 된다. 문자나 문자열이라면 변수에 이 문자나 문자열이 들어가서 사용한다. 리스트의 인자가 2개라면...

   리스트 = [(1,2), (3,4), ...]

   for (1st 인자, 2nd 인자) in 리스트:

리스트는 숫자도 되고, 문자도 되고. 리스트를 특정 숫자의 배열로 만들면 특정 숫자를 이용한 반복문을 만들수 있다. 

 

2. for 변수 in range(stop) = for 변수 in range(0, stop): 

주어진 stop 미만까지만 반복하면서 값을 변수에 할당한다.

 

3. for 변수 in range([start,] stop [, step]):

*[]는 생략 가능한 인자라는 의미임

start부터 stop미만까지만 반복하면서 값을 변수에 할당하는데 step만큼 이동하면서 값을 할당한다.

   예) for i in range(2, 10, 2):

   2, 4, 6, 8

만일 step이 음수라면? 숫자가 감소하는 for 반복문을 만들 수 있습니다. 물론 start와 stop을 큰 수에서 작은 수로 변경해야 겠죠.

 

반응형

핸드폰으로 촬영한 영상 파일이나, 기타 영상 파일들이 내 컴퓨터에 일일이 폴더별로 잘(?) 정리가 되어 있을 때가 있습니다.  

그런데...

다시 한군데로 모아서 정리하려니, 일일이 폴더를 들어 갔다가 나와야 하는 불편함이 있네요...ㅡㅡ;a 

그래서 다른 능력자 분들의 코드를 모아서 조합을 해 봤습니다. 

아래 코드를 참조하시기 바랍니다.

import os
# 셸 유틸리티는 파일 및 디렉터리 작업을 수행하는 데 사용할 모듈의 이름
import shutil
# BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# 다운로드 받은 동영상 파일이 있는 최상위 폴더
inputdirpath = "D:\\movie"

# 한군데 폴더로 옮기고 싶은 위치
savedir = inputdirpath + '\\' + "mp4"
# 혹여나, 파일을 옮기고 싶지 않은 폴더가 있다면 정의
exceptfolder1 = 'D:\\movie\\mp4'
exceptfolder2 = 'D:\\movie\\keep'
exceptfolder3 = 'D:\\movie\\temp'

# 폴더가 없다면 만들어서 사용하기
def makedir(dirname):
    if not os.path.exists(dirname):
        os.makedirs(dirname)
        print('made sub-dir')

# 폴더를 계속 검색하면서 반복하게 된다.
def searchdir(dirname):
    try:
        # 전체 폴더 목록을 가져온다.
        filenames = os.listdir(dirname)

        # 폴더 목록에서 한개씩 폴더 경로를 가져온다.
        for filename in filenames:
            # 전체 경로를 가져온다.
            full_filename = os.path.join(dirname, filename)

            # if dirname == savedir and dirname == exceptfolder1 and dirname == exceptfolder2:
            #     continue

            # 폴더가 맞는지 확인
            if os.path.isdir(full_filename):
                # 폴더 안에 또 폴더가 있다면 다시 검색 함수 호출
                searchdir(full_filename)

                # 삭제 제외 목록이 아니면 폴더 삭제
                if full_filename != savedir and full_filename != exceptfolder1 and full_filename != exceptfolder2 and full_filename != exceptfolder3:
                    shutil.rmtree(full_filename)   # 폴더 삭제
                    print("Delete folder", full_filename)
            # else:
            # 폴더가 제외할 목록이 아니면 파일 이동 / 삭제 / 확인을 수행
            elif dirname != savedir and dirname != exceptfolder1 and dirname != exceptfolder2 and full_filename != exceptfolder3:
                # 파일 이름과 확장자를 분리해서 확인
                ext = os.path.splitext(full_filename)[-1]
                name = os.path.basename(full_filename)
                # print(full_filename)
                # 동영상용 파일 이라면...
                if ext == '.mp4' or ext == '.mkv' or ext == '.avi' or ext == '.wmv':
                    print('find >> ' + full_filename)
                    # 화질이 좋은 동영상을 분류하기 위해...
                    # 만일 파일 사이즈가 저용량 이라면 삭제 / 폴더도 삭제
                    if os.path.getsize(full_filename) < (1024*1024*300):
                        # 저용량 파일 삭제
                        if os.path.isfile(full_filename):
                            os.remove(full_filename)    # 파일 삭제
                            print("delete >>", full_filename)
                            # shutil.rmtree(dirname)   # 폴더 삭제
                            # print("Delete folder", dirname)
                    else:
                        # 파일 사이즈가 고용량이면 지정 폴더로 이동
                        shutil.move(full_filename, savedir + '\\' + name)
                        print('move << ' + savedir + '\\' + name)
                else:
                    os.remove(full_filename)
    except PermissionError:
        pass

# 프로그램 완료
def finish():
    print('complete')

# 순차적으로 프로그램 수행
if __name__ == "__main__":
    print('main program')
    makedir(savedir)
    searchdir(inputdirpath)
    finish()


# 참고 사이트
# http://flowerykeyboard.tistory.com/6
# https://code.i-harness.com/ko-kr/q/3c7f09
# 파이썬 조각 코드 모음집 : https://wikidocs.net/book/536

 

+ Recent posts