Python - 用数字替换列表中的电子邮件

时间:2017-01-25 04:44:47

标签: python list io

我想用随机数替换文本文件中的所有电子邮件地址。现在我已经找到了这些电子邮件,但它们都是由regex re.findall()

列表返回的。

例如,输出如下:

['xyz123@gmail.com']

因此,当我尝试用随机数替换此输出时,我会收到错误说

Can't convert 'list' object to str implicitly

我的代码在这里:

with open('a.txt', 'r') as file1:
    with open('b.txt', 'w') as file2:
        for line in file1:
            email = re.findall(......,line)
            file2.write(line.replace(email, random.random()))

其余代码被省略,因为它们在这里没用。那么有人能告诉我如何处理这个清单吗?我试图用str()明确强制列表到字符串,但它失败了。

2 个答案:

答案 0 :(得分:0)

通过让re模块为您完成所有工作,避免转换列表对象的问题。 re.sub或regex模式object.sub将把匹配模式的子串替换为将正则表达式匹配对象作为输入的函数的输出。

#pass each line through this:
def mask_matches( string, regex ):
    ''' substrings of string that match regular expressions pattern object regex
    are replaced with random.random( ).
    '''
    def repl( mobj ):
        replacement = random.random( )
        return( replacement )
    return( regex.sub( repl, string ) )

#so if `email` is your regex pattern object, thenyour last line looks something like this:
file2.write( mask_matches( line, email ) )

答案 1 :(得分:0)

尝试循环通过电子邮件并替换,如: -

with open('a.txt', 'r') as file1:
    with open('b.txt', 'w') as file2:
        for line in file1:
            email = re.findall(......,line)
            for em in email:
                file2.write(line.replace(em, random.random()))