티스토리 뷰

반응형

 

find 메소드와 슬라이싱을 통해 이메일 호스트를 추출할 수 있다.

data = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'

# 문자열에서 @ 이 위치한 포지션을 구한다.
atpos = data.find('@')
print(atpos)

# @ 이 위치한 곳 부터 처음 발견된 공백의 포지션을 구한다.
sppos = data.find(' ', atpos)
print(sppos)

# @ 다음문자부터 공백까지의 문자열 (이메일 호스트) 을 슬라이싱한다.
host = data[atpos+1 : sppos]
print(host)

 

프로그램 수행 결과. "uct.ac.za" 라는 호스트 추출

 

split 메소드를 활용한 방법도 있다. 공백 문자를 기준으로 문자열을 나누고, 다시 @ 을 기준으로 문자열을 나눈다.

line = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'
words = line.split()
email = words[1]
pieces = email.split('@')
print(pieces[1])

 

프로그램 수행 결과. split 메소드를 이용하여 "uct.ac.za" 호스트를 추출했다.

 

정규식을 이용한 소스는 아래와 같다.

import re

lin = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'
y = re.findall('^From .*@([^ ]*)', lin)
print(y)

 

프로그램 수행 결과. 정규식을 이용하여 호스트를 추출했다.

 

간단히 설명을 하자면

  1. From 으로 시작하는 라인을 찾는다.
  2. From 다음에 공백이 하나 있고 그 이후 아무 문자가 와도 상관없다. (.*)
  3. @ 문자를 찾는다.
  4. ()로 쌓여있는 조건의 문자열만 추출한다.
  5. 공백이 아닌 문자가 반복되는 구간을 추출한다. 즉, 공백이 나올 때 까지의 문자열을 추출한다. ([^ ]*)

 

지금까지의 내용을 종합하여, 텍스트파일에서 특정 패턴을 찾고 그 패턴 중 가장 큰 값이 무엇인지 확인할 수 있다.

import re

hand = open('mbox-short.txt')
numlist = list()

for line in hand :
    line = line.rstrip()
    stuff = re.findall('^X-DSPAM-Confidence: ([0-9.]+)', line)

    if len(stuff) != 1 :
        continue
    num = float(stuff[0])
    numlist.append(num)

print('Maximum : ', max(numlist))

 

프로그램 수행 결과. 0.9907이 가장 큰 값이다.

 

END

반응형

'IT > Python' 카테고리의 다른 글

[Python] urllib  (0) 2020.11.14
[Python] 소켓  (0) 2020.11.14
[Python] 정규식을 이용한 패턴 추출  (1) 2020.11.10
[Python] 정규식 (Regular Expression)  (0) 2020.11.03
[Python] 튜플을 이용한 딕셔너리 정렬  (0) 2020.10.13
댓글
공지사항