UUID 개요

UUID는 Universally Unique IDentifier의 약자로 말 그대로 범용 고유 식별자(일련 번호)라고 해석이 가능하다.

탄생 배경은 RFC 4122 에서 명시된 규약으로 네트워크 상에서 유일성(고유성)을 보장하는 식별자(ID)를 생성하기 위한 규약이다. 즉, UUID 규약을 통해 생성한 식별자(ID)는 중복되지 않는다고 생각하면 된다. (중복될 확률이 0에 가까움)

※ RFC(Request for Comments) : IFTF(국제 인터넷 표준화 기구, Internet Engineering Task Force)에서 제공하는 문서

 

UUID 형식

UUID는 128bit 숫자로 구성되며 보통 8, 4, 4, 12자리로 구성된 32자리 16진수로 표현하며 하이픈(-)을 써서 구분한다.

time_low time_mid time_hi_and_version clock_seq_hi_and_resclock_seq_low node
8 4 4 4 12

 

예) f91877b8-388e-4557-9951-f1d90d8e8e0b

 

UUID 각 부위별 내용

명칭 저장 크기
(byte)
표현 길이
(16진수)
의미 (Wiki 제공)
time_low 4 8 integer giving the low 32 bits of the time
시간의 low 32 bit를 부여하는 정수
time_mid 2 4 integer giving the middle 16 bits of the time
시간의 middle 16 bit를 부여하는 정수
time_hi_and_version 2 4 4-bit “version” in the most significant bits, followed by the high 12 bits of the time
최상위 bit에서 4 bit의 "version" 그리고 시간의 high 12 bit
clock_seq_hi_and_resclock_seq_low 2 4 1 to 3-bit “variant” in the most significant bits, followed by the 13 to 15-bit clock sequence
최상위 bit에서 1~3 bit는 UUID의 레이아웃 형식, 그리고 13~15 bit는 clock sequence
node 5 12 the 48-bit node id
48 bit 노드 id

 

python에서 uuid 생성 방법

아주 간단하다.

 

import uuid

# 랜덤 UUID 생성
v_uuid = uuid.uuid4()
print( v_uuid  )

 

여러가지 uuid 생성 방법
좀 더 구체적으로 하기와 같이 쓸 수 있다.

 

import uuid

 

# 1. 호스트 ID, sequence, 현재 시간을 기준으로 uuid 생성

print(uuid.uuid1())

 

#  2a. uuid1 규칙을 이용하되, 현 시스템의 MAC 주소(get_mac_address)를 추가해서 보다 강한 중복 방지를 부여함

unique_id = uuid.uuid1(node=get_mac_address())

 

#  2b. namespace uuid와 name에 대한 MD5 hash에서 uuid 생성, name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용

print(uuid.uuid3(uuid.NAMESPACE_URL, name))

 

#  3. 램덤한 uuid 생성

print(uuid.uuid4())

 

#  4 namespace uuid와 name에 대한 SHA-1 hash에서 uuid 생성 , name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용

print(uuid.uuid5(uuid.NAMESPACE_URL, url))

 

특이 사항

생성된 uuid는 uuid 객체 이므로 그대로 사용하면 

UUID('022dfbec-7a09-4f9a-98e7-ab35254a401f')

처럼 UUID( '문자열' ) 형식으로 저장된다.

 

따라서 

uuid_str = str( uuid.uuid4())

로 변환하여 사용하는 것이 필요하다.

 

예제)

a = uuid.uuid4()   ; print(a)

print문이 내부 변환(즉 class 내 toString()을 호출..)하여 d227f781-3a25-40b2-929d-4a48922effee 로 출력

 

b = [a]                  ; print(b)

→  [UUID('d227f781-3a25-40b2-929d-4a48922effee')] 처럼 uuid 객체 형태를 출력

 

c = str(a)              ; print(c)

  문자열 d227f781-3a25-40b2-929d-4a48922effee 출력

 

반응형

'programming > Python' 카테고리의 다른 글

os.walk - 하위 디렉토리 포함 모든 파일 탐색  (0) 2025.04.10
venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

 

os.walk( dir )는 주어진 디렉토리( dir  ) 내의 모든 하위 디렉토리와 파일을 재귀적으로 탐색한다. 

os.listdir()가 주어진 디렉토리 내 정보만 가져오는 것과 대비된다.

 

os.walk 사용법

for (root, dirs, files) in os.walk(path_dir):  # path_dir : 탐색할 루트 폴더
    print("# root : " + root)  # 현재 폴더의 전체 경로

    if len(dirs) > 0:
        for dir_name in dirs:  # '현재' 폴더에 포함된 하위 디렉토리 명단.
            print("dir: " + dir_name)

    if len(files) > 0:  # 디렉토리가 아닌, '현재' 폴더에 포함된 파일 명단.
        for file_name in files:
            print("file: " + file_name)

 

 

반응형

'programming > Python' 카테고리의 다른 글

고유 식별자(unique id) 생성  (0) 2025.04.28
venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

 

□ 가상 환경 생성

cd 가상환경을 설치할 경로

python -m venv 가상환경이름

 

Windows - 가상환경 실행(활성화)
가상환경이름\Scripts\activate

□ macOS, Linux - 가상환경 실행(활성화)
source 가상환경이름/bin/activate

 

Windows, macOS, Linux - 가상환경 종료(비활성화)
deactivate

 

설치된 패키지 리스트 txt 파일로 변환

pip freeze > requirements.txt

 

변환된 txt 파일로 패키지 설치하기
pip install -r 파일이름.txt

반응형

'programming > Python' 카테고리의 다른 글

고유 식별자(unique id) 생성  (0) 2025.04.28
os.walk - 하위 디렉토리 포함 모든 파일 탐색  (0) 2025.04.10
파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06

 

자주 쓰는 패턴 모음

기능 패턴
숫자 ^[0-9]*$
영문자 ^[a-zA-Z]*$
한글 ^[가-힣]*$
영어 & 숫자 ^[a-zA-Z0-9]*$
E-Mail ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
휴대폰 ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
일반전화 ^\d{2,3} - \d{3,4} - \d{4}$
IP 주소 ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})
모든 기호 (공백, 개행 제외) \.|\,|\"|\'|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\=|\+|\\|\||\?|\~|\`

 

반응형

'programming > Python' 카테고리의 다른 글

os.walk - 하위 디렉토리 포함 모든 파일 탐색  (0) 2025.04.10
venv 가상환경  (0) 2024.08.21
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
DataFrame, indexing - loc, iloc  (0) 2020.09.05

주요 함수

getcwd() 현재 작업 디렉터리를 반환 os.getcwd()
mkdir() 지정된 경로에 새로운 디렉터리(폴더)를 생성
e.g.) /test/dir_a/dir_b
os.mkdir(path)
makedirs() 지정된 경로 내에 있는 상위, 하위 디렉토리(폴더)를 모두 생성
exist_ok = True 옵션은 생성할 폴더가 이미 있을 때 exception을 방지함

e.g.) /test/dir_a/dir_b     # →  /test 아래 dir_a와 dir_b가 없다면 전부 생성
os.makedirs(path, exist_ok = True)
exists() 지정된 경로가 존재하는지 확인 (True/False 값 반환) os.path.exists(path)
isdir() 지정된 경로가 디렉터리인지 확인 (True/False 값 반환) os.path.isdir(path)
isfile() 지정된 경로가 파일인지 확인(True/False 값 반환) os.path.isfile(path)
abspath() 지정된 경로의 절대 경로를 반환 os.path.abspath(path)
join() 운영 체제에 맞게 경로를 연결하여 새 경로를 생성 os.path.join(path1, path2)
split() 경로를 디렉터리와 파일로 분리(튜플로 반환) os.path.split()

 

텍스트 파일 오픈

f = open("a.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

 


 
디렉토리/파일 관리

os.chdir(path) 작업 디렉토리(현재 위치) 변경
os.getcwd() 작업 디렉토리(현재 위치) 정보 확인
os.remove( filename or path ) 파일이나 디렉토리 삭제
os.mkdir( path ) 디렉토리 생성
os.makedirs( path ) 디렉토리 생성 , /root/user/home/local/temp ... 처럼 긴 경로도 한 번에 생성 가능
os.path.abspath(filename) 파일의 상대 경로를 절대 경로로 변경하는 함수
os.path.exists(filename) 파일 존재 여부 확인 함수 (주어진 경로, 이름의 파일이 있는지 조사)
os.curdir() 현재 디렉토리 정보 확인
os.pardir() 부모 디렉토리 정보 확인
os.sep() 디렉토리 분리 문자 확인. windows "\", linux "/" 반환
os.symlink(src, dst) 원본 파일(src)에 대한 심볼릭 링크(dst)를 생성
os.rename(src, dst) 원본 파일명(src)을 주어진 파일명(dst)으로 변경

 

 

파일 목록 관리

glob.glob(wildcard)  패턴을 이용하여 파일 목록 조회
os.listdir(path)  해당 디렉토리(path)의 전체 목록 조회
dircache.listdir(path)  os.listdir(path)와 동일. 단, path가 변경되지 않으면 이미 읽은 정보를 재활용
dircache.annotate(head, list) 일반 파일명과 디렉토리명 구분
os.walk(path) 주어진 디렉토리(path) 내 모든 하위 디렉토리와 파일을 재귀적으로 탐색

 

 
파일명 관리

os.path.basename(filename) 파일명 추출
os.path.dirname(filename) 디렉토리 정보 추출
os.path.split(filename) 경로와 파일명 분리
os.path.splitdrive(filename) 드라이브명과 나머지 분리 (MS windows)
os.path.splitext(filename) 파일명과 확장자 분리

 

 

기타

os.walk

2025.04.10 - [programming/Python] - os.walk - 하위 디렉토리 포함 모든 파일 탐색

 

os.walk - 하위 디렉토리 포함 모든 파일 탐색

os.walk( dir )는 주어진 디렉토리( dir  ) 내의 모든 하위 디렉토리와 파일을 재귀적으로 탐색한다. os.listdir()가 주어진 디렉토리 내 정보만 가져오는 것과 대비된다. os.walk 사용법for (root, dirs, files)

driz2le.tistory.com

 

반응형

'programming > Python' 카테고리의 다른 글

venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15

DataFrame에서 컬럼명을 수정하는 방법은 몇 개가 존재한다.

아래와 같은 DataFrame 샘플이 존재한다고 할 때

import pandas as pd
df = pd.DataFrame( {'c1':[1, 2, 3]
                   ,'c2':[3, 4, 5]
                   ,'c3':[6, 7, 8]})

	c1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

 

□ 특정 컬럼명 수정

아래 세 가지 방법으로 컬럼명 수정이 가능하다.

df.rename( {'c1':'A1'}, axis='columns', inplace=True)
# 이때 inplace=False이면 원본 데이터(df) 값 자체는 변경하지 않는다. default는 False이다.

	A1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1'}, inplace=True)  

	B1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={df.columns[0]:'C1'}, inplace=True)

	C1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns.values[0] = 'D1'

	D1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

- inplace option

DataFrame에서 inplace option은 원본 데이터(source) 자체를 변경하는가, 하지 않는가를 지정한다.

inplace=False인 경우에는 원본 데이터 자체는 변경하지 않고 형상만 변경한다. 이때 해당 형상은 return 값을 통해서 받을 수 있다.

 

temp = df.rename( {'c1', 'A1'}, axis='columns', inplace=False) 

 

의 경우 원본 데이터인 df의 첫 번째 컬럼명은 A1으로 변경되지 않는다.

반면 temp는 컬럼명이 A1으로 변경된 데이터를 가지게 된다. 

 

같은 원리로

df.rename( {'c1', 'A1'}, axis='columns', inplace=True) 은

df = df.rename( {'c1', 'A1'}, axis='columns', inplace=False)  과 동일한 결과를 가진다.

 

 

□ 컬럼명 전체 변경

아래 방법으로 컬럼명 전체 수정이 가능하다.

df.rename( {'c1':'A1', 'c2':'A2', 'c3':'A3'}, axis='columns', inplace=True)

	A1	A2	A3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1', 'c2':'B2', 'c3':'B3'}, inplace=True)

	B1	B2	B3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns = ['C1', 'C2', 'C3']

	C1	C2	C3
0	1	3	6
1	2	4	7
2	3	5	8

 

반응형

'programming > Python' 카테고리의 다른 글

파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15
서식 지정, print format  (0) 2020.03.14

□ DataFrame.loc 사용법

구분

기본 사용법

다른 형태

row name

df.loc[ "row1" ]

 

row name list

df.loc[ "row1", "row2", "row3" ]

 

row name list slicing

df.loc[ "row1" : "row5" ]

df[ "row1" : "row5" ]

column name

df.loc[ :, "col1" ]

df[ "col1" ]

column name list

df.loc[ :, [ "col1", "col2", "col3" ] ]

df[ [ "col1", "col2", "col3" ] ]

column name list slicing

df.loc[ :, "col1" : "col5" ]

 

 

□ DataFrame.iloc 사용법

구분

기본 사용법

다른 형태

row

df.iloc[ 1 ]

 

row list

df.iloc[ [ 1, 2, 3 ] ]

 

row list slicing

df.iloc[ 1 : 5 ]

df[ 1 : 5 ]

column

df.iloc[ :, 1 ]

 

column list

df.iloc[ :, [ 1, 2, 3 ] ]

 

column list slicing

df.iloc[ :, 1 : 5 ]

 

 

반응형

'programming > Python' 카테고리의 다른 글

파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
visdom server port 변경  (0) 2020.03.15
서식 지정, print format  (0) 2020.03.14
pytorch GPU check  (0) 2019.11.08

visdom은 facebook에서 데이터 시각화를 위해 제공하는 기능이다.

딥러닝을 위해 pytorch를 사용한다면 기본적으로 설치해 두는 것이 좋다.

 

□ visdom 설치

pip install visdom

 

□ visdom 실행

python -m visdom.server

 

visdom은 웹 상에서 호출이 가능하고 visdom server가 정상적으로 수행되면 기본적으로 제공하는 포트는 8097이다.

ex) http://127.0.0.1:8097

 

이때 포트 번호는 변경할 필요가 종종 있다. 한 예로 , docker 환경에서 사용할 경우에는 8097 포트를 미리 docker 외부 연결이 가능하도록 지정하지 않았다면 docker에서 지정해 놓은 포트로 변경해야 사용이 가능하다.

포트 변경을 위해서는 -port 옵션을 사용한다.

 

□ visdom port 변경

python -m visdom.server -port [port number]

 

만약 docker 지정 포트가 9002 라면 visdom server 실행 시 -port 옵션에 9002를 기재한다. 

ex) python -m visdom.server -port 9002

 

 

□ python에서 visdom 실행

python에서는 아래처럼 간단히 호출이 가능하며 default port로 8097을 사용하여 통신한다.

import visdom
vis = visdom.Visdom()

따라서 visdom port를 변경하고 그대로 호출하면 아래와 같은 오류가 발생한다.

□ python에서 변경된 port로 visdom 실행

import visdom
vis = visdom.Visdom(port='9002')

사용 예) 변경된 port가 9002일 경우, 아래와 같이 오류없이 잘 실행된다.

웹 상에서 확인하면 Hello 문구가 잘 출력된 것을 볼 수 있다.

 

 

반응형

파이썬 print문에서 format 메소드 사용 시 서식 지정방법은 아래와 같다.

 

□ 형식

① 소수점을 포함한 전체 길이 지정

② 소수점 이하 길이 지정, 반올림 처리

③ 서식지정자

 

□ 출력 방식

소수점을 포함하여 전체 길이를 출력한다. 한 예로 6.2f는 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 출력한다.

소수점은 반올림 처리된다.

소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

소수점 이하 길이가 우선순위가 높다. 소수점 이하 길이를 먼저 처리한 후 나머지 자리수를 맞춘다.

전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

소수점 길이가 클 경우 뒤에 0으로 채워진다.

 

예1) 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 총 6자 길이로 출력된다.

print( "{:6.2f}".format( 123.456 ))
123.46

예2) 소수점은 반올림 처리된다.

print( "{:6.2f}".format( 123.456 ))	# 소수점 3자리에서 반올림
123.46
print( "{:6.2f}".format( 123.451 ))	# 소수점 3자리에서 반올림
123.45

예3) 소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

print( '{:4.2f}'.format( 123.456))	# 전체 길이 4에 맞추어 3.46 또는 123.(4글자)이 출력되는 것이 아니다.
123.46

 예4) 소수점 이하 길이 지정에 대한 우선순위가 높다.

print( '{:1.2f}'.format( 123.456))	# 소수점 2자리를 지정하고 전체길이 1은 무시된다.
123.46

예5) 전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

print( '{:6.2f}'.format( 123.456))
print( '{:7.2f}'.format( 123.456))
print( '{:8.2f}'.format( 123.456))
print( '{:9.2f}'.format( 123.456))
123.46
 123.46
  123.46
   123.46

예6) 소수점 길이가 클 경우 뒤에 0으로 채워진다.

print( '{:6.2f}'.format( 123.456))
print( '{:6.3f}'.format( 123.456))
print( '{:6.4f}'.format( 123.456))
print( '{:6.5f}'.format( 123.456))
print( '{:6.6f}'.format( 123.456))
123.46
123.456
123.4560
123.45600
123.456000
반응형

일반적인 경우 아래 세 개 command로 pytorch에서 GPU를 사용가능한지 확인이 가능하다.

import torch

torch.cuda.is_available()

torch.cuda.get_device_name(0)

torch.cuda.device_count()

 

각각의 command를 설명하면 다음과 같다.

# GPU를 사용할 수 있는 지 알 수 있다.

torch.cuda.is_available()

→ True

 

# GPU 정보를 반환한다. 아래는 0번 GPU 정보를 반환한다.

torch.cuda.get_device_name(0)

'GeForce GTX 1080 Ti'

 

# 사용가능한 GPU 개수를 반환한다. 아래 예제는 2개의 GPU가 있다는 것을 알 수 있다.

torch.cuda.device_count()

→ 2


# 만약 os 세팅을 통해서 GPU 개수를 줄인다면

# 터미널에서 아래와 같이 환경변수 CUDA_VISIBLE_DEVICES를 0으로 설정한 후 python 실행

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

# 환경 변수에 의해서 사용가능한 GPU가 0번만 지정되어 1개로 나타난다.

torch.cuda.device_count()

→ 1

 

# 아래와 같이 사용하는 것은 tourch.cuda.device_count() 결과에 영향을 주지 않는다.

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

import os

os.environ['CUDA_VISIBLE_DEVICES]  = "0"

torch.cuda.device_count()

→ 2

 

이외 아래와 같은 명령어들이 있다.

# 항상 0을 return

torch.cuda.current_device()

→ 0

 

# device 정보 반환

torch.cuda.device(0)

 

반응형

+ Recent posts