일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Scheduling
- Express
- algorithm
- linux
- Network
- python
- macos
- React
- css
- Kotlin
- Crawling
- HTML
- wireshark
- postman
- sequelize
- AWS
- docker
- Android
- OOAD
- MongoDB
- node.js
- DATABASE
- mongoose
- mysql
- S3
- Util
- OS
- TypeScript
- typeorm
- ubuntu
- Today
- Total
Seongwon Lim
[Python] 문자열 파싱 라이브러리 - Pygrok 설치 및 사용 방법 본문
서론
이번 글에서는 파이썬 내 라이브러리를 이용하여 복잡한 문자열을 처리할 수 있는 기능을 간단하게 구현해보고자 한다.
ELK 스택(Elasticsearch + Logstash + Kibana)를 알고 있는 사람이라면 로그스태시의 Grok Parser 기능을 들어보거나 사용해본 사람들이 있을 것이다. Grok Parser는 로그스태시 내에서 사용되며, 복잡하게 구성된 로그들을 사용자가 정의한 정규 표현식에 맞추어서 키:값 형태로 추출해주는 기능을 제공한다.
이번에 다루는 Pygrok 라이브러리도 로그스태시의 Grok Parser 기능과 동일한 기능을 제공한다고 생각하면 좋을 것 같다.
설치하기
pip install pygrok
위 명령어를 이용하여 Pygrok을 설치한다.
예제 코드
text = 'gary is male, 25 years old and weighs 68.5 kilograms'
다음과 같은 코드가 있을 때, 유의미한 데이터를 추출하고자 한다면 이름, 성별, 나이, 몸무게 정도가 될 수 있다.
따라서 4개의 속성을 추출하고 싶다면 다음과 같이 pygrok 코드를 정의할 수 있다.
from pygrok import Grok
pattern = '%{WORD:name} is %{WORD:gender}, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
grok = Grok(pattern)
print grok.match(text)
# {'gender': 'male', 'age': '25', 'name': 'gary', 'weight': '68.5'}
사용 방법을 살펴보면,
%{} 안에 패턴을 정의하며 안에 순서는 타입:추출변수명을 순서대로 작성하여 패턴을 정의할 수 있다.
따라서, 위와 같이 패턴을 정의하고 Grok 객체 생성 후 text 변수를 해당 패턴에 적용하면 위와 같은 딕셔너리 형태의 결과를 확인할 수 있다.
- 만약 나이(age)와 몸무게(weight)의 값을 문자열 형태가 아니라 각각 정수(int),실수(float)으로 반환하고 싶다면
NUMBER:age:int 그리고 NUMBER:weight:float 으로 사용하면 된다.
또한, 값이 존재하지 않는 경우를 예외처리 하고 싶을 땐 물음표(?)를 사용하여 코드를 작성하면 된다. 예를 들어,
text = 'gary is , 25 years old and weighs 68.5 kilograms'
위처럼 성별에 대한 값이 없는 경우를 가정한다면, 다음과 같이 코드를 정의할 수 있다.
#%{} 뒤에 물음표(?)를 추가한다.
pattern = '%{WORD:name} is %{WORD:gender}?, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
grok = Grok(pattern)
print(grok.match(text))
# {'name': 'gary', 'gender': None, 'age': '25', 'weight': '68.5'}
물음표를 붙이지 않는 경우에는 반환 데이터 자체가 None을 반환하지만, 다음과 같이 없는 데이터에 대해서 예외 처리를 적용하면 해당 키에 대한 데이터만 None 으로 반환한다.
pygrok에서 사용할 수 있는 타입 종류와 사용 방법은 아래 링크를 참고하면 좋을 것 같다.
결론
로그 수집/분석에 대한 중요도가 갈수록 높아지고 있는 만큼,
로그를 효율적으로 처리할 수 있는 방안들을 지속적으로 공부할 예정이다.
'Python' 카테고리의 다른 글
[Python] MacOS pyspark 설치 방법 (0) | 2023.09.19 |
---|---|
[Python] nohup을 이용한 파이썬 모듈 백그라운드 실행 (0) | 2023.09.06 |
[Python] Scapy 모듈을 이용한 패킷 스니핑 구현하기 (2) | 2023.03.02 |
[Python] 약수 개수 구하기 (시간복잡도 고려하기) (0) | 2022.11.19 |
[Python] deque를 이용하여 리스트 회전하기 (0) | 2022.11.02 |