SW 프로그래밍/파이썬

문자열을 숫자로 변환; 문자를 정수(int, long), 실수(float)로 바꾸기

N2info 2019. 10. 24. 22:03

MySQL에서 데이터를 가져오면 대부분 문자이다.(varchar)

화면에는 숫자처럼 보이지만 실제는 문자열이다. 이를 통해 그래프를 그리거나 연산을 할수 없다.

간단히 숫자로 변환하는 방법이 있다.

#!/usr/bin/python
# -*- coding: cp949 -*-

# 이 파일의 맨 첫줄에 빈줄이 있으면
# SyntaxError: Non-UTF-8 code starting with '\xbc' in file example3.py on line 6,
# but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
# 이런 식의 에러가 납니다.


# "정수 문자열"을 정수로 만들어, 플러스 1 하기
s = "123"
n = int(s) + 1
print (n)      # 출력 결과: 124
# 주의: 파이썬 3에서는 print 가 함수이므로 print() 형식이어야 에러가 안 남



# "실수 문자열"을 실수로 만들어, 플러스 1 하기
s = "123.456"
n = float(s) + 1
print (n)      # 출력 결과: 124.456
# int() 로 하면 에러 남: ValueError: invalid literal for int() with base 10: '123.456'




# "long형 문자열"을 long형 정수로 만들어, 플러스 1 하기
# 주의!!: 파이썬 3에서는 long 의 이름이 int로 변경되었음
#
s = "999999999999999999999999999999999999999999999"
n = int(s) + 1
print (n)      # 출력 결과: 100000000000000

한편 숫자를 문자로 변환할수 있는데 다음과 같다.

#!/usr/bin/python
# -*- coding: cp949 -*-

# 내장함수인 str() 함수로
n = 123.456
s = str(n)
print s + "ABC"    # 출력 결과: 123.456ABC

# 키보드 맨 좌측 상단의 Backtick(Backquote:`) 문자로
# 주의! 작은따옴표(홑따옴표)가 아님
n = 123
s = `n`
print s + "ABC"    # 출력 결과: 123ABC

# C의 sprintf() 함수 스타일의 형식 지정자로
n = 100
s = "%d" % (n)
print s + "ABC"    # 출력 결과: 100ABC

또, 문자인지 숫자인지 확인하는 방법은

#!/usr/bin/python
# -*- coding: cp949 -*-

def isNumber(s):
  try:
    float(s)
    return True
  except ValueError:
    return False

print isNumber("123");
# 출력 결과: True

print isNumber("123.0");
# 출력 결과: True

print isNumber("+.5");
# 출력 결과: True

print isNumber(123);
# 출력 결과: True

print isNumber("123ZZZ");
# 출력 결과: False

print isNumber("0xFF");
# 출력 결과: False         # 16진수 문자열은 인식 못함. 다만, 16진수 숫자는 됨

print isNumber('');        # 빈 문자열
# 출력 결과: False

print isNumber('     ');   # 공백 문자
# 출력 결과: False

출처 : http://mwultong.blogspot.com