python3.x - Cara menggunakan maketrans dalam python dalam fail utf-8
过去多啦不再A梦
过去多啦不再A梦 2017-05-18 10:58:56
0
1
768

Saya menulis fail untuk memproses teks, iaitu menggantikan semua simbol dalam teks dengan ruang. Gunakan maketrans dan terjemah dalam python. Ia adalah perkara biasa apabila menggunakan fail berkod ASCII, tetapi apabila menggunakan fail UTF-8, ralat dilaporkan, menunjukkan bahawa parameter dalam maketrans tidak sama panjang, tetapi jelas panjangnya sama:

Fail "/Users/lgq/Desktop/p3.py", baris 10, dalam text_to_words

"abcdefghijklmnopqrstuvwxyz                                                   ") 

ValueError: dua argumen maketrans pertama mesti mempunyai panjang yang sama

Saya telah menyemak dan ia mengatakan bahawa maketrans tidak boleh digunakan di bawah utf-8 Jadi bagaimana saya harus menggantikan aksara di bawah utf-8. Tolong beri saya nasihat.

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梦

membalas semua(1)
滿天的星座

Pertama sekali, panjang kedua-dua rentetan ini tidak sama " ialah aksara dan \ juga merupakan aksara
Anda boleh menggunakan len. () Semak
Bagi soalan rentetan, adalah lebih baik untuk menunjukkan versi python" 是一个字符, \ 也是一个字符
你可以用 len() 查看。
然后关于字符串什么的问题,最好说明 python 的版本

maketrans

maketrans panjang parameter tidak sama

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

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!\"#$%&()*+,-./:;<=>?@[]^_`{|}~\'\测试')
keluaran

['abcdefghijklmnopqrstuvwxyz', '\xe6\xb5\x8b\xe8\xaf\x95']
Ini adalah hasil daripada menjalankan python2🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan