如何从元组中随机选择一个字符串并在文本的每一行中随机插入?

时间:2018-01-11 01:24:41

标签: python python-3.x random pycharm

我有这个文字(" prediction.txt"):

email01
email02
email03
email04
email05

我想随机分类一个类型(" SPAM"," OK")到每封电子邮件,这样我就会有这样的事情:

email01 OK
email02 SPAM
email03 OK
email04 OK
email05 SPAM

我的代码如下:

import os
import random


class BaseFilter:

    def __init__(self, mail, em_type):
        with open(mail, 'r') as f:
            self.em_type = f.read().replace('\n', em_type)


class RandomFilter(BaseFilter):
    "Returns randomly either SPAM or OK"
    types = ('SPAM', 'OK')
    rand_type = random.choice(types)

    def __init__(self, mail):

        types = ('SPAM', 'OK')
        rand_type = random.choice(types)
        super().__init__(mail, em_type= ' ' + rand_type + '\n')

通过以下方式测试时:

random = RandomFilter('prediction.txt')
print(random.em_type)

但我实际收到的是:

email01 SPAM
email02 SPAM
email03 SPAM
email04 SPAM
email05 SPAM

或者这个:

email01 OK
email02 OK
email03 OK
email04 OK
email05 OK

因此,如何在每一行上随机收到OK或垃圾邮件?

2 个答案:

答案 0 :(得分:1)

您的问题源于Field方法的输入em_type参数只有一个值。

当你打电话给它后,

BaseFilter.__init__()

rand_type = random.choice(types) super().__init__(mail, em_type= ' ' + rand_type + '\n') 确定垃圾邮件。没有变化的余地。因此,在rand_type中,您将所有行标记为BaseFilter.__init__()类型,其中em_type是一个值。

我建议您不要尝试使用em_type方法完成所有工作。相反,请尝试在您的对象上写generator function作为iterator

__init__

答案 1 :(得分:0)

您需要使用random.SystemRandom()。默认情况下,Python按系统时间生成randoms,如果你在很短的时间内运行你的随机生成,它将给出相同的“随机”结果(据我所知,这是OS上随机生成的常见问题)。