繁体   English   中英

python写入不起作用

[英]python write doesn't work

由于某些原因,我无法向空白文本文件写入任何内容。 我最后使用了 file.close() ,但它仍然根本不起作用。 那么有人能指出我可能出错的地方吗?

下面是完整的代码,基本上我所做的是从文本文件中检索唯一的电子邮件地址,然后将这些唯一的电子邮件与唯一的五位数字匹配,最后写入一个新文件,用这些数字替换电子邮件。

import re
import random


email_list = []
anon = {}
number_list = []

##There are 54 unique emails, so I set len(number_list) = 54 here
while len(number_list) < 54:
    rand = random.randint(10000,99999)
    rand = '%%' + str(rand) + '%%'
    if rand not in number_list:
        number_list.append(rand)

i = 0

a = open('mbox.txt','r')
for line in a:
    if re.findall(r'[A-Za-z\.-]+\S@[\w\.-]+\.[\w]+',line):
        email = re.findall(r'[A-Za-z\.-]+\S@[\w\.-]+\.[\w]+',line)[0]
        if email not in email_list:
            email_list.append(email)
            anon[email] = number_list[i]
            i += 1
    else:
            email = "NA"


b = open('mbox-anon.txt','wt', encoding='utf-8')

for line in a:
    for email in anon:
        try:
            linereplace = line.replace(email,anon[email])
            b.write(linereplace)
        except:
            pass
a.close()
b.close() 

假设您的意图是替换第一个文件内容并将它们放入第二个文件中,您应该将for line in b替换for line in b

a.seek(0)
for line in a:

或者在第一个循环之前打开b ,并添加

b.write(line.replace(email, anon[email]))

对于每次迭代。

我认为这段代码可以满足您的需求。 它读取文件mbox.txtmbox.txt提取所有电子邮件,并按照您的方法将每个唯一的电子邮件地址映射到一个 5 位数的值。 然后将相同的数据写入mbox-anon.txt ,用每个电子邮件地址替换其对应的 5 位数值。

import random
import re


def generate_crypto_value():
    return '%%{}%%'.format(random.randint(10000, 99999))


def obscure_emails(file_in, file_out, email_masker):
    with open(file_in) as f_in, open(file_out, 'w') as f_out:
        data = f_in.read()

        email_pattern = r'[A-Za-z\.-]+\S@[\w\.-]+\.[\w]+'
        for email in set(re.findall(email_pattern, data)):
            data = data.replace(email, email_masker())

        f_out.write(data)


if __name__ == '__main__':
    obscure_emails(
        file_in='mbox.txt',
        file_out='mbox-anon.txt',
        email_masker=generate_crypto_value)

运行前的示例mbox.txt

Here's one address: foo.bar@email.com
Another address: baz@hotmail.org
And the first address again: foo.bar@email.com with some text after it

运行后的示例mbox-anon.txt

Here's one address: %%61286%%
Another address: %%51955%%
And the first address again: %%61286%% with some text after it

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM