【问题标题】:Python - Trying to create a simple antispam filterPython - 尝试创建一个简单的反垃圾邮件过滤器
【发布时间】:2016-10-20 08:55:03
【问题描述】:

我必须为毕业论文编写一个简单的垃圾邮件过滤器。我的目的是打开并阅读两个不同的列表,一个是垃圾邮件,一个是火腿。名称(cartella)就像英文中的文件夹。问题是当我打印垃圾邮件时,它只打印数组spam[0] 的第一个元素,当我打印长度时它打印1,但它应该打印1500。问题出在函数中。我需要帮助。

这是我的代码:

import nltk 
import os

def importalista(cartella):
    lista=[]
    listafile=os.listdir(cartella)
    for file in listafile:
        f=open(cartella + file, 'r+')
        lista.append(f.read())
        f.close()

        return lista

spam = importalista('C:\\enron1\\spam\\')
ham = importalista('C:\\enron1\\ham\\')
print(len(spam))

【问题讨论】:

  • 由于return 语句在您的for 循环内,因此您的循环只会运行一次迭代。如果将return 移出for 循环,它将在for 循环完成后返回。
  • 你的return语句不应该缩进,对吧?现在您在阅读第一个文件后返回。
  • 感谢您的回复.. 那么我应该把回线放在哪里?

标签: python input spam


【解决方案1】:

你在 for 循环中有 return 语句。它将在第一次迭代后退出该函数。如果您按如下方式更改代码,那将是正确的。 导入 nltk 导入操作系统

def importalista(cartella):
    lista=[]
    listafile=os.listdir(cartella)
    for file in listafile:
        f=open(cartella + file, 'r+')
        lista.append(f.read())
        f.close()

    return lista

spam = importalista('C:\\enron1\\spam\\')
ham = importalista('C:\\enron1\\ham\\')
print(len(spam))

【讨论】:

  • 感谢您的回复.. 那么我应该把回线放在哪里?
  • 感谢您的回复.. 那么我应该把回线放在哪里?
  • UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1651: character maps to
  • 这是因为您的过滤器文件中有一些字符无法使用默认设置进行编码。打开文件时,请使用 open(filename, encoding='utf8') 以避免此类编码错误。
猜你喜欢
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2015-03-06
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多