Python 문자열 파싱


Python 문자열 파싱
Python에서 문자열 파싱 방법에 대해서 설명드립니다. 추출하고자 하는 데이터가 문자열 안에 포함되어 있을 경우 편리하게 추출하는 방법입니다.

추가적으로 추출하고자 하는 값에 이름을 할당하여, 값이 추출 된 뒤에도 변수처럼 사용할 수 있습니다.

패키지 설치

가장 먼저 아래의 명령어를 이용하여 parse라는 패키지를 설치해 주시기 바랍니다. 이번 글에서는 parse 라는 패키지를 사용하여 문자열에서 값을 추출하는 방법에 대해서 설명드릴 것입니다.

$ pip install parse

간단 예제

문자열 파싱 하는 방법에 대해서 설명해 드리기 전에, 먼저 간단한 예제를 실행해 보도록 하겠습니다.

from parse import *

result = parse("It's {}, I love it!", "It's spam, I love it!")

print (result)
print (result[0])

위의 코드를 실행한 결과는 아래와 같습니다.

<Result ('spam',) {}>
spam

parse 라는 함수를 호출하면서 2가지 값을 전달 하였습니다. 첫 번째 값은 추출하고자 하는 문자열의 패턴을 나타낸 것이고, 두번째 값은 추출하고자 하는 문자열 입니다.

성공적으로 문자열로 부터 값 또는 데이터를 추추하면, 추출된 값이 리턴되지만 추출하지 못했을 경우 None 값을 리턴하게 됩니다.

패턴 컴파일

만약 패턴으로부터 데이터를 추출해야 할 문자열이 많을 경우, 패턴을 컴파일 하여 보다 빠르게 사용할 수 있습니다.

from parse import compile

p = compile("It's {}, I love it!")
print(p)

result = p.parse("It's spam, I love it!")

print (result)
print (result[0])

위의 코드를 실행한 결과는 아래와 같습니다.

<Parser "It's {}, I love it!">
<Result ('spam',) {}>
spam

패턴을 컴파일 후, 추출하고자 하는 데이터가 포함된 문자열을 전달 하여 파싱 한 것을 알 수 있습니다.

포맷 문법

문자열에서 하나의 값 또는 데이터를 추출하는 것이 아니고, 여러 종류의 데이터를 추출해야 하는 경우가 있을 것입니다. 다음 예제를 확인해 보도록 하겠습니다.

from parse import *

result = parse("The {} who say {}", "The knights who say Ni!")

print (result)
print (result.fixed)
<Result ('knights', 'Ni!') {}>
('knights', 'Ni!')

위의 예제는 하나의 입력된 문자열에서 여러개의 데이터를 추출 한 것을 알 수 있습니다. 추출된 결과에서 인덱스를 사용하여 추출된 값을 참조 할 수 있습니다.

result = parse("Bring out the holy {item}", "Bring out the holy hand grenade")

print (result)
print (result.named)
print (result["item"])
<Result () {'item': 'hand grenade'}>
{'item': 'hand grenade'}
hand grenade

그리고 위의 예제는 추출하고자 하는 값에 이름을 할당하여, 값을 추출한 것을 알 수 있습니다. 위의 방법을 사용하면 인덱스 대신에 의미 있는 이름을 사용하여 추출된 값을 참조 할 수 있을 것입니다.

다음 예제는 다차원 구조로 데이터로 패턴을 정의 한 뒤에 데이터를 추출 한 예제를 나타냅니다.

result = parse("My quest is {quest[name]}", "My quest is to seek the holy grail!")

print (result)
print (result["quest"])
print (result["quest"]["name"])
<Result () {'quest': {'name': 'to seek the holy grail!'}}>
{'name': 'to seek the holy grail!'}
to seek the holy grail!

위의 구조는 그룹화 된 데이터를 추출 할 때 유용하게 사용 될 것입니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)