본문 바로가기

Python22

Python pathlib.Path로 경로관리하기 얼마전 노트북을 새로 구매하였다. 이전 노트북은 debian 운영체제를 사용하고 있었다. 그래서 개인적으로 간단하게 만드는 파이썬 프로그램들에는 별 생각 없이 슬래시(/)가 포함된 경로를 그대로 넣었었다. 이 프로그램들은 경로를 구분하는 데에 역슬래시를 사용하는 윈도우 프로그램에선 정상적으로 작동하지 않는다. os.path.join을 사용해서 처리하려다가 경로를 문자열이 아닌 객체로 처리하는 pathlib.Path에 대해 알게되었다. Path를 이용해서 경로를 처리하는 법 import from pathlib import Path Path 객체 생성 p = Path('.') p2 = Path('.','folder2') 시스템에 따라서 PosixPath, WindowsPath중 하나로 생성이 된다. 경로 연.. 2021. 6. 10.
Python multiprocessing.Pool 멀티프로세싱 2 Python에선 multiprocessing.Pool을 이용하여 멀티프로세싱을 할 수 있다. Process를 활용할 때는 우리가 직접 Process를 만들어서 그 Process위에서 작업을 돌렸다면, Pool은 지정된 개수만큼 프로세스를 미리 만들어 놓고, 그 프로세스들 위에서 작업을 돌리는 방식이다. Pool 사용하기 from multiprocessing import Pool if __name__ == '__main__': p = Pool(4) # do something here with Pool # blabla # blablabla p.close() # or p.terminate() p.join() 생성 처음 Pool을 생성할 때에 사용될 프로세스 수를 지정할 수 있다. 만약, 주어지지 않는다면 os.. 2021. 6. 7.
Python multiprocessing.Process 멀티프로세싱 1 파이썬에서 멀티프로세싱을 이용하여 여러 작업을 동시에 처리할 수 있다. multiprocessing의 Process를 사용하여 이를 간단히 구현할 수 있다. Process 사용 아래 코드는 Process를 사용하는 가장 간단한 방법이다. from multiprocessing import Process def func(string): print(string) if __name__ == "__main__": proc = Process(target=func,args=('process',)) proc.start() process Process의 서브클래스를 만들어 사용할 수도 있다. 이때, 반드시 run() 메서드를 오버 라이딩해주자. from multiprocessing import Process class .. 2021. 6. 3.
Python collections의 Counter로 개수 세기 Python의 리스트나 튜플 혹은 이외의 iterable 한 객체에서 안에 요소가 몇 개가 들어있는지 셈을 하고 싶을 때가 있다. 구현이 오래 걸리는 작업은 아니지만, 구현하기 귀찮거나 시간이 없을 때 collections의 Counter를 사용해주면 좋다. 이 글은 Counter를 사용하는 방법에 대한 내용을 담고 있다. Counter import Counter를 사용해주기 위해 먼저 import를 하자. from collections import Counter 기본적인 Counter의 생성 및 사용 생성자에 아무 값도 넣어주지 않으면 빈 Counter가 생성된다. cnt = Counter() print(cnt) Counter() Counter를 사용하여 iterable 한 객체가 담고 있는 것들을 세.. 2021. 5. 27.
python에서 json 다루기 파이썬에서 json을 다루어 보자. 모듈을 사용하지 않는 방법도 있지만, 편하게 하기 위해 json모듈을 import 하여 사용하자. import json json모듈은 json형식의 문자열들을 파이썬 객체로 바꾸어주고, 그 반대로도 바꾸어준다. 그래서 어떤 파이썬 객체가 어떤 json의 어디에 해당하는지 파악하면 좀 더 편하게 다룰 수 있다. 아래는 그 표이다. Python Json None null dict Object list Array tuple Array int Number float Number str String True true False false 사실 이렇게 써놓아도 크게 외울 것은 없다. 숫자는 숫자고, 문자열은 문자열, True, False는 맨 앞 대문자만 다르다. json에서 p.. 2021. 5. 24.
python의 with 구문 (context manager) 한번 보기 대부분의 경우 파이썬을 배우면서 with를 처음 접하는 때는 파일을 다룰 때이다. 어떤 파일을 다루고 나서는 close를 해주어야 프로그램이 정상 동작한다. 그러나 파일을 다루던 도중에 오류로 인해 예상치 않게 프로그램이 종료가 된 경우 close를 미처 해주지 못한 경우도 발생한다. try - finally 구문을 이용하면 실행 도중 오류가 발생하였을 때 close를 해 줄 수 있다. 그러나 with를 사용하면 우리가 직접 close를 해 줄 필요가 없다. 컨텍스트 매니저를 통해 자원의 할당과 반납을 필요할 때 해주기 때문이다. try finally vs with # Handling file with try - finally f = open('a.txt','w') try: f.write('hello w.. 2021. 5. 19.
Python 문자열(string) 그냥 한번 대충 보기 Python string 그냥 한번 대충 보기¶ 문자열에 관하여 간단하게 보는 글 문자열 생성¶ a = 'abcdefgh' b = "12345" c = """ㄱㄴㄷ ㄻㅄ ㅇㅈㅊㅋ""" print(a) print(b) print(c) abcdefgh 12345 ㄱㄴㄷ ㄻㅄ ㅇㅈㅊㅋ 문자열 요소 접근¶배열 접근하듯 하면 된다. a[0] 'a' a[4] 'e' a[-1] 'h' a[1:4] 'bcd' a[-3:] 'fgh' sentence = "hello world" for c in sentence: print(c) h e l l o w o r l d 문자열의 길이는 ?¶ len(sentence) 11 더하기 기호로 문자열 .. 2021. 4. 14.
Python에서 Glob으로 파일 혹은 폴더의 경로 불러오기 Python에서 Glob으로 파일과 폴더경로 불러오기¶ import glob 폴더 구조는 아래와 같다. data폴더와 파이썬 노트북이 하나 존재한다. data폴더엔 abc.tiff파일하나와 train,test 두개의 폴더가 있다. train,test폴더엔 tiff, json파일이 두개씩 존재한다. !ls ./ -R ./: data glob.ipynb ./data: abc.tiff testtrain ./data/test: ccc.json ccc.tiff ddd.json ddd.tiff ./data/train: aaa.json aaa.tiff bbb.json bbb.tiff 현재 폴더에 있는 폴더와 파일의 경로들을 받는다. glob.glob('./*') ['./glob.ipynb&#39.. 2021. 3. 26.
Kaggle에서 Pytorch로 간단한 Mnist 숫자 분류기 만들기 Pytorch로 간단한 Mnist 숫자 분류기 만들기¶캐글에서 Mnist 숫자를 분류하는 연습을 여기서 할 수 있다. Kaggle에서 제공하는 데이터와 환경으로 간단하게 Mnist 숫자를 분류하는 연습을 해보자. import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset,DataLoader 사용할 경로와 epoch, 배치사이즈, learning rate를 한곳에서 쉽게 조정하여 사용할 수 있도록 하였다. class PATH: TRAIN = '/ka.. 2021. 3. 16.
Pytorch로 선형 회귀(Linear Regression) 구현하기 Pytorch로 선형회귀 구현하기¶ import numpy as np import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.optim import SGD 데이터 생성¶y = 2*x + 10에서 약간의 오차를 준 데이터를 사용하였다. # y = x*2 + 10 data_x = np.random.randint(1,20,20) data_y = np.array([1*np.random.randn() + x*2 + 10 for x in data_x]) data_x = torch.FloatTensor(data_x).unsqueeze(dim=1) data_y = torch.FloatTensor(data_y).unsqueeze(dim=.. 2021. 3. 15.