"3. 문자자료형"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
(새 문서: 문자 자료에 대한 문서. 분류:기초)
 
 
(사용자 3명의 중간 판 9개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
문자 자료에 대한 문서.
 
문자 자료에 대한 문서.
 +
 +
<youtube>https://www.youtube.com/watch?v=ur6GTMaAYw0&t=65s</youtube>
 +
 +
==이스케이프 코드==
 +
프로그래밍을 위해 미리 정의해 둔 조합. 표현할 방법이 없으니, 코드화 하여 표현한다.
 +
 +
실제로 사용할 땐 역슬레시로 나타난다.
 +
{| class="wikitable"
 +
!코드
 +
!설명
 +
|-
 +
|\n
 +
|개행(줄바꿈)
 +
|-
 +
|\t
 +
|탭(간격맞추기)
 +
|-
 +
|\\
 +
|문자 \
 +
|-
 +
|\'
 +
|따옴표
 +
|-
 +
|\"
 +
|쌍따옴표
 +
|}문자열을 'C:\경로\note' 라고 기입할 때 \n을 개행으로 인식하여 줄을 바꾸어버리곤 한다. 이러한 사태를 막기 위해선 문자열 앞에 <code>r'내용'</code> 형태로 앞에 r을 붙이면 이스케이프 코드를 사용하지 않고 입력한 그대로 나타난다.(r은 Raw string을 의미하는 것)
 +
=문자열의 사용 =
 +
===따옴표 사용===
 +
문자열 데이터에 ' 를 사용하려면 다른 조치가 필요하다. 기본적으로 ', "는 문자열을 구분하기 위해 쓰이기 때문이다.
 +
{| class="wikitable"
 +
!입력법
 +
!방법
 +
|-
 +
|'I\'m sam'
 +
|문자 앞에 \(역슬래시)를 넣는다.
 +
|-
 +
|"i'm sam"
 +
|쓰고자 하는 따옴표와 다른 종류의 따옴표를 사용한다.
 +
|}큰 따옴표도 같은 방식으로 입력한다.
 +
 +
문자를 정의할 때 따옴표 3개를 써서 정의하면 그 안에 보이는 그대로 문자열을 사용할 수 있다. 이것저것 생각하기 귀찮을 때 사용하자.
 +
 +
===인덱싱===
 +
첫 번째 글자는 0번으로 인덱싱된다. 인덱스는 스페이스를 포함한다. 문자[숫자] 형태로 필요한 문자열을 포함할 수 있으며 문자[시작인덱스:끝인덱스] 형태로 여러 개의 문자를 뽑아낼 수도 있다.
 +
 +
==문자열 포메팅==
 +
상황에 따라 다른 정보를 추출하기 위해 변하는 데이터를 포함한 문자열을 만들 필요가 있다. 문자열 안의 데이터를 수시로 바꿔주기 위한 편의장치.
 +
{| class="wikitable"
 +
!의도
 +
!방법
 +
!예시
 +
|-
 +
|문자열 포메팅
 +
|"문자열 %d 문자열"%숫자
 +
위 형태로 문자열 안의 데이터를 바꾸어줄 수 있다.
 +
|<syntaxhighlight lang="python">
 +
deg = 23
 +
temp = "현재온도는 %d도 입니다."%deg
 +
</syntaxhighlight>
 +
|-
 +
|2개라면?
 +
|"문자열 %d 문자열 %d"%(숫자1, 숫자2)
 +
벡터형태로 넣어주면 된다.
 +
|
 +
|}
 +
===문자열 포멧 코드===
 +
{| class="wikitable"
 +
!의도
 +
!코드
 +
!이름기원
 +
|-
 +
|문자열 넣기
 +
|%s
 +
|string
 +
|-
 +
|문자 1개
 +
|%c
 +
|character
 +
|-
 +
|정수
 +
|%d
 +
|
 +
|-
 +
|부동소수
 +
|%f
 +
|float-point
 +
|-
 +
|문자 % 넣기
 +
|%%
 +
|
 +
|}
 +
===format===
 +
문자열 포멧코드 대신 <code>"오늘 {}교시는 {}시간입니다.".format(5, "과학")</code> 형태로 쓸 수도 있다. 데이터가 무너질 확률은 커지지만, 유연성이 크다.
 +
 +
이게 진짜 유용하다. 웹크롤링이나 문자를 다루는 데 굉장한 편의성을 제공한다. <code>"제가 사는 도시는 {city} 입니다. 이곳은 {deg}도 입니다.".format(city="값", deg=5)</code> 형태로 기입도 가능하다.
 +
 +
==== 숫자 3자리 마다 콤마 찍기 ====
 +
금액을 표현할 때 숫자 3개마다 콤마가 있으면 가독성이 올라간다. <code>format(대상숫자, ',')</code> 형태로 간단하게 구현이 가능하다.
 +
 +
=== f-string 표현 ===
 +
문자열 앞에 f를 붙여 <code>f"{변수}는 {변수2}입니다."</code> 형태로 직관적인 사용이 가능하다.
 +
 +
==문자열 관련함수==
 +
{| class="wikitable"
 +
|+
 +
!함수
 +
!의도
 +
!사용법
 +
|-
 +
|count
 +
|문자열 안에 특정 문자가 몇 개 있는지 알고 싶을 때 쓴다.
 +
|문자열.count("셀 문자")
 +
|-
 +
|find
 +
|문자열 안에 특정 문자가 어디에 있는지 인덱스를 알려준다.
 +
|문자열.find("찾을문자")
 +
|-
 +
|index
 +
|find와 유사하다.
 +
다만, 없는 문자를 찾을 때 find에선 -1을 반환하는 반면, index는 에러를 내서 종료시킨다.
 +
|문자열.index("찾을문자")
 +
|-
 +
|replace
 +
|특정 문자를 바꾸고자 할 때.
 +
|문자열 = 문자열.replace("찾을문자", "바꿀문자")
 +
|-
 +
|split
 +
|특정 문자열을 기준으로 문자들을 나누고자 할 때.
 +
|문자열 = 문자열.split("나눌문자")
 +
|-
 +
|join
 +
|특정 문자열을 사이에 두고 합칠 때.
 +
ex) 2021, 03, 22 형태의 파편화된 날짜데이터를 보기 좋게 합쳐줌.
 +
|문자열 = '사이문자'.join(리스트)
 +
|}
 +
==정규표현식==
 +
{| class="wikitable"
 +
|+
 +
!표현식
 +
!설명
 +
!활용
 +
|-
 +
|\D
 +
|숫자가 아닌 문자.
 +
|<syntaxhighlight lang="python">
 +
import re  # 정규표현식을 사용하게 해주는 모듈.
 +
 +
date = '2020.10-3' # 다양한 형태의 날짜.
 +
date_list = re.split('\D+', date)  # 숫자가 아닌 문자 한개 이상으로 구분하여 숫자맨 빼낼 때.
 +
year = int(date_list)[0]  # 이처럼 다양한 형태라도 날짜형식을 받을 수 있다.
 +
day = {day:02d}  # :02d 는 2글자로 표시하되, 1자리라면 0을 채워넣는다는 의미이다.
 +
 +
 +
</syntaxhighlight>
 +
|-
 +
|특수문자를 지정하고 싶을 때
 +
|!, ,, ?, *등의 문자를 매칭할 때.
 +
|영어와 ?, !, ,, 만 뽑아낼때.<syntaxhighlight lang="python">
 +
import re  # 정규표현식을 사용하게 해주는 모듈.
 +
...
 +
    for one_word in text:
 +
        filtered = re.sub('[^a-zA-Z0-9\?\!\,\.]', ' ', one_word)  # 글자 하나하나 비교해 영어+숫자만 추출. 아니면 공백.
 +
        filtered_text = filtered_text + filtered  # 통과된 글자만 담아준다.
 +
 +
</syntaxhighlight>
 +
|-
 +
|
 +
|
 +
|
 +
|}
 
[[분류:기초]]
 
[[분류:기초]]

2022년 7월 26일 (화) 10:09 기준 최신판

문자 자료에 대한 문서.

1 이스케이프 코드[편집 | 원본 편집]

프로그래밍을 위해 미리 정의해 둔 조합. 표현할 방법이 없으니, 코드화 하여 표현한다.

실제로 사용할 땐 역슬레시로 나타난다.

코드 설명
\n 개행(줄바꿈)
\t 탭(간격맞추기)
\\ 문자 \
\' 따옴표
\" 쌍따옴표

문자열을 'C:\경로\note' 라고 기입할 때 \n을 개행으로 인식하여 줄을 바꾸어버리곤 한다. 이러한 사태를 막기 위해선 문자열 앞에 r'내용' 형태로 앞에 r을 붙이면 이스케이프 코드를 사용하지 않고 입력한 그대로 나타난다.(r은 Raw string을 의미하는 것)

2 문자열의 사용[편집 | 원본 편집]

2.1 따옴표 사용[편집 | 원본 편집]

문자열 데이터에 ' 를 사용하려면 다른 조치가 필요하다. 기본적으로 ', "는 문자열을 구분하기 위해 쓰이기 때문이다.

입력법 방법
'I\'m sam' 문자 앞에 \(역슬래시)를 넣는다.
"i'm sam" 쓰고자 하는 따옴표와 다른 종류의 따옴표를 사용한다.

큰 따옴표도 같은 방식으로 입력한다.

문자를 정의할 때 따옴표 3개를 써서 정의하면 그 안에 보이는 그대로 문자열을 사용할 수 있다. 이것저것 생각하기 귀찮을 때 사용하자.

2.2 인덱싱[편집 | 원본 편집]

첫 번째 글자는 0번으로 인덱싱된다. 인덱스는 스페이스를 포함한다. 문자[숫자] 형태로 필요한 문자열을 포함할 수 있으며 문자[시작인덱스:끝인덱스] 형태로 여러 개의 문자를 뽑아낼 수도 있다.

2.3 문자열 포메팅[편집 | 원본 편집]

상황에 따라 다른 정보를 추출하기 위해 변하는 데이터를 포함한 문자열을 만들 필요가 있다. 문자열 안의 데이터를 수시로 바꿔주기 위한 편의장치.

의도 방법 예시
문자열 포메팅 "문자열 %d 문자열"%숫자

위 형태로 문자열 안의 데이터를 바꾸어줄 수 있다.

deg = 23
temp = "현재온도는 %d도 입니다."%deg
2개라면? "문자열 %d 문자열 %d"%(숫자1, 숫자2)

벡터형태로 넣어주면 된다.

2.3.1 문자열 포멧 코드[편집 | 원본 편집]

의도 코드 이름기원
문자열 넣기 %s string
문자 1개 %c character
정수 %d
부동소수 %f float-point
문자 % 넣기 %%

2.3.2 format[편집 | 원본 편집]

문자열 포멧코드 대신 "오늘 {}교시는 {}시간입니다.".format(5, "과학") 형태로 쓸 수도 있다. 데이터가 무너질 확률은 커지지만, 유연성이 크다.

이게 진짜 유용하다. 웹크롤링이나 문자를 다루는 데 굉장한 편의성을 제공한다. "제가 사는 도시는 {city} 입니다. 이곳은 {deg}도 입니다.".format(city="값", deg=5) 형태로 기입도 가능하다.

2.3.2.1 숫자 3자리 마다 콤마 찍기[편집 | 원본 편집]

금액을 표현할 때 숫자 3개마다 콤마가 있으면 가독성이 올라간다. format(대상숫자, ',') 형태로 간단하게 구현이 가능하다.

2.3.3 f-string 표현[편집 | 원본 편집]

문자열 앞에 f를 붙여 f"{변수}는 {변수2}입니다." 형태로 직관적인 사용이 가능하다.

2.4 문자열 관련함수[편집 | 원본 편집]

함수 의도 사용법
count 문자열 안에 특정 문자가 몇 개 있는지 알고 싶을 때 쓴다. 문자열.count("셀 문자")
find 문자열 안에 특정 문자가 어디에 있는지 인덱스를 알려준다. 문자열.find("찾을문자")
index find와 유사하다.

다만, 없는 문자를 찾을 때 find에선 -1을 반환하는 반면, index는 에러를 내서 종료시킨다.

문자열.index("찾을문자")
replace 특정 문자를 바꾸고자 할 때. 문자열 = 문자열.replace("찾을문자", "바꿀문자")
split 특정 문자열을 기준으로 문자들을 나누고자 할 때. 문자열 = 문자열.split("나눌문자")
join 특정 문자열을 사이에 두고 합칠 때.

ex) 2021, 03, 22 형태의 파편화된 날짜데이터를 보기 좋게 합쳐줌.

문자열 = '사이문자'.join(리스트)

2.5 정규표현식[편집 | 원본 편집]

표현식 설명 활용
\D 숫자가 아닌 문자.
import re  # 정규표현식을 사용하게 해주는 모듈.

date = '2020.10-3' # 다양한 형태의 날짜.
date_list = re.split('\D+', date)  # 숫자가 아닌 문자 한개 이상으로 구분하여 숫자맨 빼낼 때.
year = int(date_list)[0]  # 이처럼 다양한 형태라도 날짜형식을 받을 수 있다.
day = {day:02d}  # :02d 는 2글자로 표시하되, 1자리라면 0을 채워넣는다는 의미이다.
특수문자를 지정하고 싶을 때 !, ,, ?, *등의 문자를 매칭할 때. 영어와 ?, !, ,, 만 뽑아낼때.
import re  # 정규표현식을 사용하게 해주는 모듈.
...
    for one_word in text:
        filtered = re.sub('[^a-zA-Z0-9\?\!\,\.]', ' ', one_word)  # 글자 하나하나 비교해 영어+숫자만 추출. 아니면 공백.
        filtered_text = filtered_text + filtered  # 통과된 글자만 담아준다.