我需要使用Python或Perl从大于n
的电子邮件列表中随机发送n
封电子邮件。电子邮件列表以逗号分隔,如下所示:
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
)将所有电子邮件提取到一个数组中,并使用随机数生成器生成0
和{{之间的唯一数字列表1}},其中x-1
是原始列表中的电子邮件数量(我假设在Perl中开始数组位置,Python从x
开始),然后使用这些数字打印出来新的电子邮件块到另一个文件中。也许这些随机数可以放入另一个数组中,然后放入电子邮件数组中。
答案 0 :(得分:0)
试一试
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)