AttributeError: 'unicode' objet n'a pas d'attribut "supprimer"
Je suis en train d'essayer de transformer une chaîne de caractères en une liste de mots séparés--rien de mais des lettres. Cependant, autant que je peux dire, unicode est à l'origine des problèmes.
essay_text = ['This,', 'this,', 'this', 'and', 'that.']
def create_keywords(self):
low_text = self.essay_text.lower()
word_list = low_text.split()
abcs = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z']
for n in word_list:
for m in n:
for l in abcs:
if m!=l:
n.remove(m)
self.keywords.setdefault(n, 0)
self.keywords[n] = word_list.count(n)
for m in bad_words:
if n==m:
del self.keywords[n]
print self.keywords
J'obtiens cette erreur:
AttributeError: 'unicode' object has no attribute 'remove'
Comment puis-je résoudre ce problème?
Mise à jour:
Je ne comprends pas pourquoi mes chaînes sont en unicode. Si elle est pertinente, ici, c'est la classe que ce modèle se trouve sous:
class Essay(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
essay_text = models.TextField()
sources = models.TextField()
def __unicode__(self):
return self.title
Pourquoi mes chaînes de caractères en unicode?
- Juste un conseil, - Votre code actuel garde à redéfinir
abcs
. Il serait préférable de les déplacer hors de la boucle de sorte qu'il est défini une seule fois. Ou, mieux encore, utiliser laascii_lowercase
de lastring
module. - Avez-vous un
from __future__ import unicode_literals
dans votre code? que serait la cause de Python 2 pour traiter'string'
en Unicode.
Vous devez vous connecter pour publier un commentaire.
Avez-vous un
from __future__ import unicode_literals
dans votre code? Que serait la cause de Python 2.X pour traiter'string'
Unicode.Comme d'autres l'ont dit, les chaînes ne sont pas mutables et n'ont pas de
remove
méthode.Il ya un couple de modules qui simplifient grandement votre objectif:
De sortie:
L'erreur est explicite: le
n
variable, qui est une chaîne, n'a pas uneremove
méthode - c'est parce que les chaînes sont immuables en Python. Vous devrez créer une nouvelle chaîne de caractères sans les caractères que vous souhaitez supprimer.Les chaînes sont immuables, ce qui signifie qu'ils ne peuvent pas être modifiés. Ce que vous aurez vraiment besoin de faire est de créer une nouvelle chaîne à sa place, avec seulement les lettres: