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

Random Email Picker of Size n

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

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

文件名为 emails.txt。我只需要找到一种随机方式,无论在这种情况下这意味着什么,将其中的 select n 从列表中取出并用逗号将它们分隔到一个名为 email_block.txt 的单独文件中。


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

试一试

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)