파이썬(python)2024. 6. 25. 10:58

 

예전에 정리했던 "파이썬(python)을 이용해서 이메일(eml) 파일의 보낸 사람, 받는 사람, 제목 확인하기"에서 이어지는 내용이라고 할 수 있겠다. 이번에는 본문을 확인하는 방법이다. 마찬가지로 파이썬(python)의 email 모듈을 이용한다. 

이메일 파일은 하나 또는 여러개의 부분으로 구성될 수 있다. 첨부 파일이 없는 간단한 메일이라면 하나의 부분만 있을 것이고, 아래의 예시처럼 해 볼 수 있겠다.

 

import email

f = open("my_simple_mail.eml", "r")

eml_msg = email.message_from_file(f)

# eml 파일의 본문(payload) 가져오기
eml_payload = eml_msg.get_payload(decode=True)
# 본문을 utf-8 텍스트로 변환
decoded_text = eml_payload.decode('utf-8')

print(decoded_text)

 

첨부 파일이 포함되어 여러 부분으로 구성된 이메일이면 위의 예시에서 get_payload()를 사용할 경우 리스트(list) 형식으로 가져온다. 여기서 "decode=True"를 지정하지 않아야 한다는 점에 유의. 여러개의 부분이 있으므로 각 부분에 대해 각각 get_payload(decode=True) 형태로 본체를 가져와야 한다. 리스트의 각 원소가 다시 이메일 메시지 형식이 되므로 첫번째 부분을 utf-8 텍스트로 변환하면 되겠다. 

 

import email

f = open("my_mail.eml", "r")

eml_msg = email.message_from_file(f)

eml_payload_list = eml_msg.get_payload()

# 리스트의 첫번째 항목을 처리
eml_payload = eml_payload_list[0].get_payload(decode=True)

decoded_text = eml_payload.decode('utf-8')

print(decoded_text)

 

위의 두 예시를 하나로 합쳐 보자. get_payload()를 통해서 받은 결과의 type을 확인해서 str인 경우와 list인 경우에 따라 다르게 처리해 준다. 

 

import email

f = open("my_mail.eml", "r")

eml_msg = email.message_from_file(f)

eml_payload = eml_msg.get_payload()
payload_type = type(eml_payload)

if payload_type == list:
	decoded_text = eml_payload[0].get_payload(decode=True)
	print(decoded_text.decode('utf-8'))
elif payload_type == str:
    decoded_text = eml_msg.get_payload(decode=True)
    print(decoded_text.decode('utf-8'))
else:
    print("오류: payload 형식이 list도 아니고 str도 아닙니다.")
Posted by 반달가면
파이썬(python)2024. 6. 7. 12:00

당장은 아니지만, 나중에 쓸 일이 있을지도 모르겠다 싶어서 일단 기록해 두기로.

파이썬을 이용해서 유니코드 문자열에 일본어가 있는지 확인하는 방법이다. 정규표현식(regular expression, regex)을 이용해서 문자열에 히라가나 또는 카타카나가 있는지 검색할 수 있다.

우선 유니코드에서 히라가나와 카타카나의 코드 범위를 알아야 한다. 이에 대한 정보는 위키피디아에서 볼 수 있다. 아래의 링크로 가서 "CJK scripts and symbols" 항목을 참조하면 된다.

Plane (Unicode)

코드의 범위는 아래와 같다.

히라가나: 3040-309f
카타카나: 30a0-30ff

이제 파이썬에서 정규표현식을 이용한 패턴 검색을 해 볼 수 있다.

import re

# 히라가나
pattern_hiragana = re.compile(u'[\u3040-\u309f]')

# 카타카나
pattern_katakana = re.compile(u'[\u30a0-\u30ff]')

# 히라가나 또는 카타카나
pattern_both = re.compile(u'[\u3040-\u309f\u30a0-\u30ff]')

target_str = 'ひらがな'

if pattern_hiragana.search(target_str):
  print("히라가나 발견:", target_str)

if pattern_katakana.search(target_str):
  print("카타카나 발견:", target_str)

if pattern_both.search(target_str):
  print("히라가나 또는 카타카나 발견:", target_str)

 

Posted by 반달가면
IT_잡담2024. 6. 4. 23:09

ASUS M513UA-L1284 노트북의 배터리가 갑자기 돌연사(?)했다. 그동안 별 문제 없이 잘 사용하고 있었는데, 전원을 연결하지 않고 배터리로 사용하는 상태에서 이것 저것 좀 과도하게 작업을 돌렸는데 분명히 배터리 잔량이 약 50%정도 되었는데 갑자기 노트북이 꺼졌다.

이상하다 싶어서 전원 코드를 연결해 보니, 배터리 램프가 주황색으로 깜빡거린다. 원래 충전상태면 주황색 램프가 그대로 켜져 있어야 하는데 깜빡거리고 있으니 뭔가 문제가 생겼음이 분명하다.

전원을 켜 보니 다행이 노트북은 정상적으로 잘 부팅이 되었다. 전원 상태를 보니까 배터리 성능 27%라고 나오고 충전이 안되고 있다. 뭔가 고장이 난 것이 분명하다.

작년에 산 노트북인데 왜 이렇게 빨리 배터리가 이상해졌을까 곰곰히 생각해 봤는데, 잘은 모르겠지만 지난 겨울에 영하의 온도에서 며칠간 방치되어 있던 적이 있었기 때문이 아닌가 의심이 되기도 한다.

일단 전원 코드를 연결하고 사용이 가능해서 당장 문제는 없는 상태.

ASUS 공식 웹사이트의 보증 기간 조회 페이지에서 노트북 시리얼 번호 넣고 보증 기간을 조회해 보니 이미 보증 기간은 만료되었다. 노트북 보증 기간이 1년인데 이미 지나갔다. ASUS 제품 보증 기간 조회는 아래의 링크로 가면 된다. 

ASUS 보증 기간 조회하기

상황을 봐야 겠지만, 영 불편하다 싶으면 호환 배터리를 사서 직접 교체를 해야 할 지도 모르겠다.

 

 

Posted by 반달가면
일기_잡담2024. 5. 29. 14:35

얼마전에 자동차 타이어 한쪽 앞바퀴 타이어의 옆면이 눈에 띄게 튀어나온 것 같길래, 공기압을 확인해 보니 눈에 띄게 내려가 있었다. 공기를 다시 주입해서 맞추고 비눗물을 분사해서 확인해 봤지만 펑크 난 곳은 없는 듯했다. 펑크가 났으면 타이어가 완전히 주저앉아야 될 것 같은데 그렇지 않은 것을 보니 어딘가에서 엄청 미세하게 공기가 새는 것아 아닌가 의심이 들었다. 

며칠 동안 유심히 봤는데, 한동안 타이어가 멀쩡한 것 같더니 또 다시 타이어 옆면이 튀어 나온다. 공기압을 확인하려고 타이어 밸브 캡을 풀어서 여는데 아주 작게 "픽!"하고 공기가 새는 듯한 소리가 났다. 이것인가? 아무래도 타이어 밸브에서 미세하게 공기가 새고 있는 모양이다.

 

일단 공기압을 맞추긴 했는데, 이대로는 안될 것 같다. 타이어 교체한지가 5년이 넘었으니 바꿀 때도 되어서 이렇게 된 김에 타이어 4개를 전부 교체할 예정. 타이어 바람이 빠지면 타이어만 의심했었는데, 밸브에서 미세하게 공기가 샐 가능성도 있겠구나. 타이어 교체할 때 밸브도 같이 교체해 달라고 해야겠다. 

Posted by 반달가면