Advertisement
mimosa

bcc2.py

Mar 4th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #! /usr/bin/python
  2. #bcc.py
  3. #
  4. #A script to strip email addresses from a file and convert them to a format suitable for pasting into a bcc field
  5.  
  6. import sys, string
  7.  
  8. def main():
  9.  
  10.     #infile = open("raw.txt", "r")         #to call from within IDE for debugging
  11.     infile = open(sys.argv[1], 'r')        #open the file given to the script as an argument
  12.     rawString = infile.read()
  13.    
  14.    
  15.     rawString = stripOut(rawString, "\n")   #replace newlines with spaces
  16.    
  17.     rawString = stripOut(rawString, "\t")   #replace tabs with spaces
  18.  
  19.     for char in "\n\t\"\/\'^?\/]}[{":
  20.         rawString = stripOut(rawString, char)
  21.        
  22.    
  23.    
  24.    
  25.    
  26.    
  27.     addressList = []                       #create an empty list to put the addresses in
  28.     for address in string.split(rawString):#break it up into items separated by whitespace
  29.        
  30.         address = wellFormed(address)      #strip it of forbidden elements
  31.         if address !="":                   #check the result still contains an email address
  32.             addressList.append(address)    #if so, add it to the list
  33.  
  34.     bccString = ", ".join(addressList)     #join the addresses together separated by commas
  35.     infile.close()                         #close the input file
  36.     outfile = open("bcc.txt", "w")         #open file to write
  37.     outfile.write(bccString)               #write
  38.     outfile.close()                        #close
  39.     #print bccString                        #IDE debugging
  40.    
  41.  
  42. def wellFormed(possAddress):               #turn input into well-formed email address, or empty string
  43.    
  44.     at = False                             #make sure "@" is present
  45.     for char in possAddress:
  46.         if char == "@":
  47.             at = True
  48.     if at == False:
  49.         return ""                          #if not, return an empty string
  50.  
  51.     user, domain = possAddress.split("@")  #divide into user and domain
  52.     user, domain = stripLeft(user), stripRight(domain) #strip off forbidden characters from beginning and end respectively
  53.  
  54.     if user == "" or domain == "":         #if either is empty, return empty string
  55.         return ""
  56.     else:
  57.         return user + "@" + domain
  58.  
  59.  
  60. def stripLeft(text):                       #strip inadmissible characters off the neginning of the username
  61.     if text == "":
  62.         return text
  63.     elif alphaNum(text[len(text)-1]) == False:
  64.         return ""                          #throw away illegal character and anything to its left
  65.     else:
  66.         return stripLeft(text[:-1]) + text[-1] #recursively move leftward if character is legal
  67.  
  68. def stripRight(text):                      #strip inadmissible characters off the end of the domain name
  69.     if text == "":
  70.         return text
  71.     elif alphaNum(text[0]) == False:
  72.         return ""
  73.     else:
  74.         return text[0] + stripRight(text[1:])
  75.  
  76.  
  77. def alphaNum(char):                        #check if character permitted
  78.     if char == "":
  79.         return False                       #if empty string
  80.     ascii = ord(char)                      #get ASCII value of character
  81.     if ascii == 46:                        #is it a full stop?
  82.         return True
  83.     if ascii == 95:                        #or an underscore?
  84.         return True
  85.     if ascii == 45:                        #or a minus sign?
  86.         return True
  87.     elif ascii > 64 and ascii < 91:        #or a capital letter?
  88.         return True
  89.     elif ascii > 96 and ascii < 123:       #lower case?
  90.         return True
  91.     elif ascii > 47 and ascii < 58:        #a numeral?
  92.         return True
  93.     else:
  94.         return False                       #not a permitted character then ...
  95.  
  96. def stripOut(mainString, subString):
  97.     return " ".join(mainString.split(subString))#replace occurrences of subString with spaces  
  98.  
  99. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement