recherche

Maison  >  Questions et réponses  >  le corps du texte

python3.x - Comment utiliser maketrans en python dans des fichiers utf-8

J'ai écrit un fichier pour traiter le texte, qui consiste à remplacer tous les symboles du texte par des espaces. Utilisez maketrans et traduisez en python. C'est normal lors de l'utilisation de fichiers encodés ASCII, mais lors de l'utilisation de fichiers UTF-8, une erreur est signalée, indiquant que les paramètres dans maketrans ne sont pas de longueur égale, mais ils ont évidemment la même longueur :

Fichier "/Users/lgq/Desktop/p3.py", ligne 10, dans text_to_words

"abcdefghijklmnopqrstuvwxyz                                                   ") 

ValueError : les deux premiers arguments maketrans doivent avoir la même longueur

J'ai vérifié et il a été dit que maketrans ne pouvait pas être utilisé sous utf-8. Alors, comment dois-je remplacer les caractères sous utf-8 ?

def text_to_words(the_text):
    """ 
        Return a list of words with all punctuation removed,
        and all in lowercase.
    """
    my_substitutions = the_text.maketrans(
        # If you find any of these
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&()*+,-./:;<=>?@[]^_`{|}~'\",
        # Replace them by these
        "abcdefghijklmnopqrstuvwxyz                                            ")
    # Translate the text now.
    cleaned_text = the_text.translate(my_substitutions)
    wds = cleaned_text.split()
    return wds


def get_words_in_book(filename):
    """ Read a book from filename, and return a list of its words."""
    f = open(filename, "r", encoding = "utf-8")
    content = f.read()
    f.close()
    wds = text_to_words(content)
    return wds


book_words = get_words_in_book("alice.txt")
print("There are {0} words in the book, the first 100 are\n{1}".
        format(len(book_words), book_words[:100]))
过去多啦不再A梦过去多啦不再A梦2742 Il y a quelques jours766

répondre à tous(1)je répondrai

  • 滿天的星座

    滿天的星座2017-05-18 11:00:56

    Tout d'abord, les longueurs de ces deux chaînes ne sont pas égales. " est un caractère, et \ est également un caractère
    Vous pouvez utiliser len () Vérifiez.
    Quant à la question des chaînes, il est préférable d'indiquer la version de python" 是一个字符, \ 也是一个字符
    你可以用 len() 查看。
    然后关于字符串什么的问题,最好说明 python 的版本

    maketrans.

    Les longueurs des paramètres maketrans ne sont pas égales

     my_substitutions = the_text.maketrans(
            # If you find any of these
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&()*+,-./:;<=>?@[]^_`{|}~'\",
            # Replace them by these
            "abcdefghijklmnopqrstuvwxyz                                            ")

    Code de test :

    from string import translate, maketrans
    
    def text_to_words(the_text):
        """ 
            Return a list of words with all punctuation removed,
            and all in lowercase.
        """
        my_substitutions = maketrans(
            # If you find any of these
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&()*+,-./:;<=>?@[]^_`{|}~'\",
            # Replace them by these
            "abcdefghijklmnopqrstuvwxyz                                          ")
        # Translate the text now.
        cleaned_text = the_text.translate(my_substitutions)
        wds = cleaned_text.split()
        return wds
    
    text_to_words('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&()*+,-./:;<=>?@[]^_`{|}~\'\测试')

    sortie

    ['abcdefghijklmnopqrstuvwxyz', '\xe6\xb5\x8b\xe8\xaf\x95']

    C'est le résultat de l'exécution de python2🎜

    répondre
    0
  • Annulerrépondre