பைத்தான் ரிஜெக்ஸ் – 7 – ஒரு கோப்பில், மின்னஞ்சலில் உள்ள மின்னஞ்சல் முகவரியைக் கண்டுபிடிப்பது எப்படி?

நம்மிடம் ஒரு கோப்பு(File) இருக்கிறது என்று வைத்துக் கொள்ளுங்கள். அந்தக் கோப்பில் நிறைய தகவல்கள் இருக்கின்றன. அந்தத் தகவல்களில் ஒரு சில மின்னஞ்சல் முகவரிகளும் இருக்கின்றன. அந்த மின்னஞ்சல் முகவரிகள் மட்டும் நமக்கு வேண்டும். இதைப் பைத்தான் ரிஜெக்ஸ் பயன்படுத்திச் செய்யப் போகிறோம். இந்த வேலையில் இரண்டு படிகள் இருக்கின்றன.
1. கோப்பைத் திறந்து பைத்தான் கையில் கொடுப்பது.
இது மிக எளிது.
file_content = open(‘test.txt’)
மேல் உள்ள வரியில் test.txt என்னும் கோப்பைத் திறந்து (open) அதை file_contentஇல் பொதிந்து வைக்கிறோம். இப்போது முதல் படி முடிந்தது.

2. பைத்தான் கையில் இருக்கும் கோப்பை வரிவரியாக வாசித்து, மின்னஞ்சல் முகவரியைத் தேடுவது.
இப்போது கையில் இருக்கும் கோப்பில் எத்தனை வரிகள் இருக்கின்றன என்று நமக்குத் தெரியாது அல்லவா! எனவே, கடைசி வரி வரை கோப்பை வாசிக்க வேண்டும். அதற்கு ஒரு for loopஐப் பயன்படுத்திக் கொள்ளலாம். எப்படி? இப்படி ->
for line in file_content:
இப்படி எழுதினால், ஒவ்வொரு வரியாகக் கிடைத்து விடும். இப்போது செய்ய வேண்டியது என்ன? கையில் கிடைக்கும் ஒவ்வொரு வரியிலும் மின்னஞ்சல் முகவரி இருக்கிறதா? என்று பார்க்க வேண்டும்.

மின்னஞ்சல் முகவரியை எப்படி உறுதிப்படுத்துவது?
மின்னஞ்சல் முகவரியைப் பொறுத்தவரை பல வகைகளில் இருக்கலாம்.
abcd@abcd.com
abcd_123@abcd.com
12345@abcd.com
abcd@abcd.co.in
ஆகிய எல்லாமே மின்னஞ்சல்கள் தாம்! ஆனால் இவை ஒவ்வொன்றும் ஒவ்வொரு வகையாக இருக்கின்றன. இவற்றிற்கிடையே இருக்கும் பொது வடிவம் என்ன? அதைக் கண்டுபிடித்தால் போதும் – மின்னஞ்சலா என்று உறுதிப்படுத்தி விடலாம்.

மின்னஞ்சலின் பொது வடிவம் என்ன? மின்னஞ்சல்களில் இடைவெளி இருக்காது என்பதும் @ குறியீடு இடையே இருக்கும் என்பதும் தானே! சுருக்கமாகச் சொல்ல வேண்டும் என்றால் – இடைவெளி இல்லாத சில எழுத்துகள் @ குறியீட்டுக்கு முன்னும் பின்னுமாக இருக்கும். சரி தானே!
இடைவெளி இல்லாத எழுத்துகள் என்பதைப் பைத்தான் ரிஜெக்சில் எப்படிச் சொல்ல வேண்டும்? \S (நன்றாகப் பார்த்துக் கொள்ளுங்கள் – பெரிய எழுத்தில் S) என்பது தான் இடைவெளி இல்லை என்பதைச் சொல்லும். இடைவெளி இல்லாமல் எழுத்துகளின் கூடுகை என்பதை \S+ என்று குறிப்பிடுவார்கள். இந்த எழுத்துகளுக்குப் பிறகு @ குறியீடு இருக்கும். அதன் பிறகு, abcd.com என்பது போன்ற தள முகவரி இருக்கும். அதாவது, @ குறியீட்டுக்குப் பிறகும், தொடர்ச்சியான எழுத்துகள் இடைவெளியில்லாமல் இருக்கும். இதை @\S+ என்று எழுதலாம். இப்போது இவை எல்லாவற்றையும் சேர்த்து, ‘\S+@\S+’ என்று எழுதினால் நம்முடைய வேலை முடிந்தது.

இந்தப் பொது வடிவத்தில் எந்தெந்த வார்த்தைகள் இருக்கின்றனவோ, அவற்றை எல்லாம் ஒவ்வொரு வரியிலும் தேட வேண்டும்.
re.findall(‘\S+@\S+’,line) – இப்படித் தேடும் போது மின்னஞ்சல் பட்டியல் ஒன்று (list) கிடைக்கும்.

இப்போது மொத்தமாகச் சேர்த்து எழுதினால்,

file_content = open('test.txt')
for line in file_content
  list = re.findall('\S+@\S+',line)
#இந்தப் பட்டியலில் மின்னஞ்சல் இருந்தால் அதை அச்சிடலாம்
if len(list)>0:
  print(list)

மின்னஞ்சலில் இருந்து அனுப்பியவர் மின்னஞ்சல் முகவரியை மட்டும் எடுக்க முடியுமா?
கீழ் உள்ள மின்னஞ்சலைப் பாருங்கள். இந்த மின்னஞ்சல் email_sender.txt என்னும் கோப்பாகச் சேமிக்கப்பட்டிருப்பதாகக் கொள்ளுங்கள்.

From: Shrinivasan T <tshrinivasan@gmail.com>
Date: Wed, Jul 29, 2020 at 2:14 PM
Subject: [FTC] Fwd: 663 மின்னூல்கள் – 78 லட்சம் பதிவிறக்கங்களுடன் 7 ஆண்டுகளை நிறைவு செய்யும் FreeTamilEbooks.com திட்டம்
To: தஇக - கணித்தமிழ் வளர்ச்சி <tva_kanitamil_valarchi@googlegroups.com>, freetamilcomputing@googlegroups.com <freetamilcomputing@googlegroups.com>, கணித்தமிழ் ஆய்வுக் குழுமம் <kanittamiz@googlegroups.com>, Mozillians Tamilnadu <MozilliansTN@googlegroups.com>

78 லட்சத்துக்கும் மேற்பட்ட பதிவிறக்கங்கள், 663 மின்னூல்கள், பல்லாயிரம்
வாசகர்கள், நூற்றுக்கணக்கான எழுத்தாளர்கள், பல புது பங்களிப்பாளர்களுடன்
சூலை 26 2020 அன்று FreeTamilEbooks.com திட்டம் 7 ஆண்டுகளை நிறைவு
செய்து 8 ஆவது ஆண்டில் நுழைந்துள்ளது.

மின்னூல் திட்டமாகத் தொடங்கி, கணியம் அறக்கட்டளையாக வளர்ந்து, மின் தமிழ்
உலகில் பல்வேறு செயல்களை செய்யும் வகையில் வளர்ந்துள்ளது பெருமகிழ்ச்சி.

பெருமளவு நேரத்தையும், உழைப்பையும், நன்கொடையையும் அள்ளித்தரும் அனைத்து
பங்களிப்பாளர்களின் அன்புக்கும் ஆதரவுக்கும் பல்லாயிரம் நன்றிகள்.

இந்த மின்னஞ்சலை அனுப்பியவரின் மின்னஞ்சல் முகவரி என்ன? tshrinivasan@gmail.com – எப்படிக் கண்டுபிடித்தோம்? ‘From’க்குப் பக்கத்தில் அனுப்பியவர் பெயர் இருக்கிறது. அதற்குப் பக்கத்தில் மின்னஞ்சல் முகவரி இருக்கிறது. இப்படித் தானே கண்டுபிடித்தோம். இதைப் பைத்தானுக்குச் சொன்னால் போதும்! சொல்ல முயலலாமா? வாருங்கள்!
‘From’ எனத் தொடங்கும் வரியை எப்படிக் கண்டுபிடிப்பது? re.search(‘^From’, line) எனக் கொடுத்தால் போதும் – ^ (தொப்பிக்) குறி முதலில் வரும் வார்த்தையைக் குறிக்கும்.  இப்படிக் கொடுத்து அந்த வரியை எடுத்து விட்டோம். இப்போது அந்த வரியில் உள்ள மின்னஞ்சல் முகவரியை மட்டும் எடுக்க வேண்டும். அதாவது, str தரவு வகையில் கிடைக்கும் வரியை உடைத்து list ஆக மாற்றி விடுவோம். str தரவு வகையை எப்படி list ஆக மாற்றுவது? line.rsplit() என்று கொடுத்தால் line என்னும் strஐ, list ஆக மாற்றி விடலாம்.
sendermail = line.rsplit()
பிறகு அந்த listஇல் உள்ள கடைசி வார்த்தையை அச்சிட்டால் போதும் – மின்னஞ்சல் முகவரி கிடைத்து விடும். sendermail[len(sendermail)-1] என்பது கடைசி வார்த்தையைத் தந்து விடும். அந்தக் கடைசி வார்த்தையில் < > ஆகியன குறிகளை நீக்குவதற்கு strip() ஐப் பயன்படுத்திக் கொள்ளலாம்.

இப்போது கீழ் உள்ள நிரல் – புரிகிறதா எனப் பாருங்கள்.
email_sender.py:
———————-

import re
file_content = open('email_sender.txt')
for line in file_content:
  if(re.search('^From:', line)):
    print('1: ', line) # என்ன அச்சாகிறது எனப் பாருங்கள்.
    #print(type(len)) # என்ன அச்சாகிறது இங்கே? முயலுங்கள்.
    sendermail = line.rsplit()
    #print(type(sendermail)) # என்ன அச்சாகிறது - பாருங்கள்.
    print('2: ',sendermail[len(sendermail)-1]) #
    email = sendermail[len(sendermail)-1].strip('<')
    print('3: ',email.strip('>'))

இன்னும் இது போல, நிறைய பயனுள்ள ரிஜெக்ஸ் நிரல்கள் பார்க்கலாம்.  பயணிப்போம் வாருங்கள்.

 

– கி. முத்துராமலிங்கம்(muthu@payilagam.com)

%d bloggers like this: