过滤器损坏。代码仅应移动电子邮件地址为2个大写字母的帐户

时间:2019-06-26 21:19:21

标签: python filter

下面的代码只能移动电子邮件地址在“ @”符号后2个位置末尾有2个大写字母的帐户。过滤器似乎可以捕获所有内容。

我更改了用户名和check_email变量中值的返回值。

mike@gmail.com
toTR@yahoo.com
erferTT@hotmail.com 
fwefEE@yahoo.com
thisYY@aol.com
that@yahoo.com

应该省略第一个和最后一个电子邮件地址,其余的应放置到新文件中,但小写的电子邮件地址也将被提取。

谢谢

import sys
import argparse
from datetime import datetime

def parse_arg():

    """Parses the args"""    
    if len(sys.argv) < 1:
        print("Args: Input filename")
        raise RuntimeError("Insufficient arguments.")

    arg_1 = sys.argv[1]

    return arg_1

#Parameter is the filename
filename = parse_arg()

#Create filename for output
output_file_date = datetime.now().strftime("%Y%m%d_%I%M%S")
output_file = output_file_date + '_' + filename

#Access the input file
with open(filename, 'rb') as input_file, open(output_file, 'w') as file_output:

    #Create the header"""
    output_file_header = input_file.readline().decode().replace('\r','')
    file_output.write(output_file_header)

    #Skip the header in the input file
    next(input_file)

       #iterate over file object line by line
        for line in input_file:

        #Create output file objects
        lines = line.decode().split(',')

        #Create the email username variable
        username = lines[1].split('@')[0]

        #Create variable that display last two characters
        check_email = username[-1:]

  #Create file based on business rules and write results to file.
        if check_email.isupper(): #and len(username) < 16:
            output_data = ','.join(lines).replace('\r','')
            file_output.write(output_data)

1 个答案:

答案 0 :(得分:0)

您要在此处检查最后一个字符,而不是最后两个字符。

代替写作 check_email = username[-1:] 做就是了 check_email = username[-2:]

定义的数字是多少个字母。

和往常一样,我建议您打印出每行的实际信息,以便您更好地了解并更好地了解正在发生的事情。