大小为n的随机电子邮件选取器

2024-10-03 15:29:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从比n大得多的电子邮件列表中随机生成n封电子邮件——使用Python或Perl。电子邮件列表以逗号分隔,如下所示:

email1@host.sx, email2@host.sx, ... email100@host.sx

文件名为emails.txt。我只需要找到一种方法,随机地,不管在这个例子中发生了什么,从列表中选择n,并用逗号分隔它们到一个名为email_block.txt的单独文件中。你知道吗


我对这个问题的理解是,我需要REGEX(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b)将所有电子邮件提取到一个数组中,并使用随机数生成器生成一个介于0x-1之间的唯一数字列表,其中x是原始列表中的电子邮件数(我假设Perl和Python中的起始数组位置从0开始),然后使用这些数字将新的电子邮件块打印到另一个文件中。也许这些随机数可以放入另一个数组,然后放入电子邮件数组。你知道吗


Tags: 文件txthost列表电子邮件数字数组perl
1条回答
网友
1楼 · 发布于 2024-10-03 15:29:10

试试这个

import csv
import random

def select_n_random(n):
    fin = open('emails.csv', 'rb')
    reader = csv.reader(fin)
    email_list = list(reader)[0]
    output_list = []
    for i in range(n):
        idx = random.randint(0, len(email_list)-1)
        output_list.append(email_list.pop(idx))

    fout = open('email_output.csv', 'wb')
    writer = csv.writer(fout, quoting=csv.QUOTE_ALL)
    writer.writerow(output_list)

    fout.close()
    fin.close()

select_n_random(10)

根据评论中的信息编辑:

import csv
import random

def select_n_random(n):
    fin = open('emails.csv', 'r+')
    reader = csv.reader(fin)
    email_list = list(reader)[0]
    output_list = []
    for i in range(n):
        idx = random.randint(0, len(email_list)-1)
        output_list.append(email_list.pop(idx))

    fout = open('email_output.csv', 'wb')
    writer = csv.writer(fout, quoting=csv.QUOTE_NONE)
    writer.writerow(output_list)

    fout.close()
    fin.close()

    # reopen original file and remove the randomly selected emails
    fin = open('emails.csv', 'w')
    writer = csv.writer(fin, quoting=csv.QUOTE_NONE)
    writer.writerow(email_list)
    fin.close()


select_n_random(10)

相关问题 更多 >