관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

텍스트 다루기 - 문자열 줄여 표시하기 및 긴 문장 줄 바꿈 그리고 정규 표현식에 대하여 본문

프로그래밍 언어/파이썬

텍스트 다루기 - 문자열 줄여 표시하기 및 긴 문장 줄 바꿈 그리고 정규 표현식에 대하여

huenuri 2024. 10. 5. 19:25

오늘부터 파이썬 라이브러리를 3일 동안 학습해 볼 것이다. 오후에 책에 왔는데 오후에는 계속 놀고 쉬다가 이제 공부를 시작해보려고 한다. 이 책에는 총 122개의 라이브러리를 소개하고 있고 분량도 정말 많다. 하지만 1장부터 차근차근 공부해 보며 파이썬 프로그램에 적용해 볼 수 있는 실력을 갖출 것이다.

파이썬은 텍스트 처리에 강한 언어이다. 문자열  자료형만 해도 강력하지만 이를 더 강력하게 하는 다양한 라이브러리도 있다. 


 

 

 

 

문자열을 줄여 표시하려면? - textwrap.shorten

textwrap.shorten()은 문자열을 원하는 길이에 맞게 줄여 표시할 때 사용하는 함수이다. 때로는 제목이나 내용 미리 보기가 너무 길어 줄여 표시했으면 할 때가 있다. 단 15자가 넘지 않을 때는 그대로 표시하기로 한다.

Life is too short, you need Python.

 

 

textwrap.shorten() 함수는 매개변수 width로 전달한 길이만큼 문자열을 줄여 표시한다. 이때 문자열에 포함된 모든 연속 공백은 하나의 공백 문자로 줄어든다. 축약된 문자열임을 뜻하는 [...] 역시 전체 길이에 포함되며 문자열은 단어 단위로 길이에 맞게 줄어든다.

한글 문자열도 마찬가지다. 단, 한글 1문자를 길이 2가 아닌 1로 계산한다는 점에 주의하자.

 

축약 표시를 ...으로 변경하고 싶다면 매개변수 placeholder를 이용한다.

 

 

textwarp 공식 문서

 

textwrap — Text wrapping and filling

Source code: Lib/textwrap.py The textwrap module provides some convenience functions, as well as TextWrapper, the class that does all the work. If you’re just wrapping or filling one or two text st...

docs.python.org

 


 

 

 

 

긴 문자열을 줄 바꿈 하려면? - textwrap.wrap

textwrap.wrap()은 긴 문자열을 원하는 길이로 줄 바꿈 할 때 사용하는 함수이다. 물자열 래핑은 문자열이 너무 길어질 때 원하는 길이로 줄 바꿈 할 때 도움이 된다.

다음 문자열이 너무 길어서 적당한 크기로 줄 바꿈 하려고 한다.

 

이 문자열을 단어가 잘리지 않도록 70자 단위로 바꾸려면 어떻게 프로그래밍해야 할까?


 

먼저 textwrap.wrap() 함수를 이용한 해결 방법은 다음과 같다. 첫 번째 단계는 textwrap.wrap() 함수는 긴 문자열을 width 길이만큼 자르고 이를 리스트로 만들어 반환한다.

 

두 번째 단계는 이를 하나의 문자열로 표시하고자 다음과 같이 join() 함수로 문자열 사이에 줄 바꿈 문자를 넣어 하나로 합친 다음 출력한다.

 

참고로 textwrap.fill() 함수를 사용하면 이 과정을 한 번으로 줄일 수 있다.

 

한 줄에 70자가 넘지 않게 출력되고 있다.

 

문자열 자료형 더 알아보기

 

02-2 문자열 자료형

문자열(string)이란 연속된 문자들의 나열을 말한다. 예를 들면 다음과 같다. ```plaintext Life is too short, You need Python a…

wikidocs.net


 

 

 

 

정규 표현식으로 개인 정보를 보호하려면? - re

정규표현식은 복잡한 문자열을 처리할 때 사용하는 기법이다. 파이썬뿐 아니라 C, 자바, 심지어 문서 작성 프로그램 등 문자열을 처리해야 하는 다양한 곳에서 활용할 수 있다.

파이썬에서 정규표현식을 이용하려면 re 모듈을 사용한다.

 

주민등록번호를 포함한 텍스트를 블로그에 올리려고 한다. 주민 등록 번호 뒷자리는 모두 * 문자로 마스킹하고자 한다. 어떻게 프로그램을 작성해야 정해진 형식의 문자열을 간단하게 바꿀 수 있을까? 이 문제를 해결하려면 다음과 같은 순서로 프로그램을 작성해야 한다.

  1. 공백 문자를 기준으로 전체 텍스트를 나눈다(split() 함수사용).
  2. 나눈 단어가 주민 등록 번호 형식인지 조사한다.
  3. 주민 등록 번호 형식이라면 뒷자리를 *******로 마스킹한다.
  4. 나눈 단어를 다시 조립한다.

이 과정을 구현한 코드는 아마도 다음과 같다.

 


 

 

하지만 re 모듈을 사용하면 더욱 간단하게 문제를 해결할 수 있다.

 

 

이 정규 표현식을 이용하여 re.compile() 함수로 만든 객체에 sub() 함수를 사용하면 이 식과 일치하는 문자열 일부분을 *로 바꿀 수 있다.

pat.sub("\g<1>-******", data) 코드는 바로 data 문자열에서 준민 등록 번호 형식 문자열을 찾아 주민 등록 번호의 뒷부분만 *******로 바꾸는 역할을 한다. 여기서 \g<1>은 정규 표현식과 일치하는 문자열 중 첫 번째 그룹을 의미한다.

 

re-정규식 연산

 

Regular Expression HOWTO

Author, A.M. Kuchling < amk@amk.ca>,. Abstract: This document is an introductory tutorial to using regular expressions in Python with the re module. It provides a gentler introduction than the corr...

docs.python.org

 


 

 

 

학습을 마치고

1단원의 텍스트를 다루는 학습을 진행해 보았다. 조금 어려웠지만 처음 라이브러리 공부를 해보니 할만했다. 앞으로 굉장히 많은 라이브러리가 소개되어 있지만 나중에 필요할 때 한 번씩 살펴보려면 모두 한 번은 공부할 필요가 있겠다.

다음 포스트에서는 바이너리 데이터에 대해서 공부해 볼 것이다.