我有这个文字(" 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或垃圾邮件?
答案 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上随机生成的常见问题)。