Python String(문자열) 조작 마법사 되기(1) : String을 일정 길이로 분할하는 깔끔한 코드

BJ Park·2021년 2월 4일
1

Python 개발 이야기

목록 보기
4/5

Python 문자열 마법사되기 시리즈를 시작!

지난 글에서 여러개의 단어를 중복문자 없이 저장할 수 있는 Trie 자료형을 소개하고 난 뒤,
문득 문자열 컨트롤에 대해서 여러가지 테크닉을 모아 소개하면 어떨까 하는 생각이 들었다.

마침 문자열을 다루는 프로젝트를 하다보니 실무에 필요한 문자열 컨트롤 중 한가지가 생겼다.
아주 긴 문서를 일정한 길이의 페이지로 분할해 저장하는 것.

굉장히 간단한 코드이지만, 즐겨찾던 python 문법 사이트들에서도 직접적으로 이런 문자열 조작법을 소개한 문서가 없고 구글에 쳐보니 여러 사이트들에 비효율적이고 가독성도 떨어지는 코드들이 난무하는 것에 놀라 여기에 가장 깔끔한 방법 하나를 공유하고 싶어졌다.

일정 길이로 String 분할하기의 문제

문자열을 일정한 길이로 쪼개야 하는 일이 자주 있을법도 한데, 전용 빌트인메서드가 없다.
그래서 아래와 같은 문제에 봉착한다.

  • 만들어질 String의 개수가 정해져 있지 않다.
    (=글 길이에 따라 달라지므로, 문자열 인덱스 넘버를 하드코딩해서 슬라이싱 해선 안된다)
  • 쪼개는 위치의 기준이 되는 문자가 특정 문자로 정해져 있지 않다.
    (=일반적으로 String 분할하면 떠오르는 split()메서드를 쓸 수 없다.)

가독성이 높은 가장 깔끔한 코드로 분할하는 방법

코드

document = "long_document"
total_length, split_length  = len(x), (any_length_you_want)
[ document[i:i+split_length] for i in range(0, total_length , split_length) ]

결과 ( split_length = 2 일때 )

['lo', 'ng', '_d', 'oc', 'um , 'en', 't']

3줄만에 목표를 달성하면서도 가독성이 굉장히 좋다. 마지막 미달된 길이 값도 손실이 없다.
변수값을 할당하는 방법과 list comprehension을 이용하는 점도 Pythonic하게 작성되어 있다.

개인적으로 xyz, abc등의 미지수 문자를 많이 사용하는 코드는 선호하지 않는다.
코드의 목적 자체가 변수이름 및 코드의 라인 구획에 그대로 드러나 있는 코드를 선호한다.

이렇게 가독성 높고 깔끔한 패턴들을 계속 수집해서 스크랩해보려 한다.

~fin~

profile
일 잘하는 백엔드 엔지니어

0개의 댓글