Advertisement
mimosa

bcc.py

Mar 4th, 2012
102
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.     rawString = stripOut(rawString, "\n")   #replace newlines with spaces
  15.  
  16.     rawString = stripOut(rawString, ",")   #replace commas with spaces
  17.    
  18.    
  19.    
  20.     addressList = []                       #create an empty list to put the addresses in
  21.     for address in string.split(rawString):#break it up into items separated by whitespace
  22.        
  23.         address = wellFormed(address)      #strip it of forbidden elements
  24.         if address !="":                   #check the result still contains an email address
  25.             addressList.append(address)    #if so, add it to the list
  26.  
  27.     bccString = ", ".join(addressList)     #join the addresses together separated by commas
  28.     infile.close()                         #close the input file
  29.     outfile = open("bcc.txt", "w")         #open file to write
  30.     outfile.write(bccString)               #write
  31.     outfile.close()                        #close
  32.     #print bccString                        #IDE debugging
  33.    
  34.  
  35. def wellFormed(possAddress):               #turn input into well-formed email address, or empty string
  36.    
  37.     at = False                             #make sure "@" is present
  38.     for char in possAddress:
  39.         if char == "@":
  40.             at = True
  41.     if at == False:
  42.         return ""                          #if not, return an empty string
  43.  
  44.     user, domain = possAddress.split("@")  #divide into user and domain
  45.     user, domain = stripLeft(user), stripRight(domain) #strip off forbidden characters from beginning and end respectively
  46.  
  47.     if user == "" or domain == "":         #if either is empty, return empty string
  48.         return ""
  49.     else:
  50.         return user + "@" + domain
  51.  
  52.  
  53. def stripLeft(text):                       #strip inadmissible characters off the neginning of the username
  54.     if text == "":
  55.         return text
  56.     elif alphaNum(text[len(text)-1]) == False:
  57.         return ""                          #throw away illegal character and anything to its left
  58.     else:
  59.         return stripLeft(text[:-1]) + text[-1] #recursively move leftward if character is legal
  60.  
  61. def stripRight(text):                      #strip inadmissible characters off the end of the domain name
  62.     if text == "":
  63.         return text
  64.     elif alphaNum(text[0]) == False:
  65.         return ""
  66.     else:
  67.         return text[0] + stripRight(text[1:])
  68.  
  69.  
  70. def alphaNum(char):                        #check if character permitted
  71.     if char == "":
  72.         return False                       #if empty string
  73.     ascii = ord(char)                      #get ASCII value of character
  74.     if ascii == 46:                        #is it a full stop?
  75.         return True
  76.     elif ascii > 64 and ascii < 91:        #or a capital letter?
  77.         return True
  78.     elif ascii > 96 and ascii < 123:       #lower case?
  79.         return True
  80.     elif ascii > 47 and ascii < 58:        #a numeral?
  81.         return True
  82.     else:
  83.         return False                       #not a permitted character then ...
  84.  
  85. def stripOut(mainString, subString):
  86.     return " ".join(mainString.split(subString))#replace occurrences of subString with spaces  
  87.  
  88. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement