View difference between Paste ID: tDG6XgAA and U0ZWHXyb
SHOW: | | - or go back to the newest paste.
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()