天天看點

python将txt轉為字元串_Python玩轉《生僻字》

python将txt轉為字元串_Python玩轉《生僻字》

茕茕孑立 沆瀣一氣

踽踽獨行 醍醐灌頂

綿綿瓜瓞 奉為圭臬

龍行龘龘 犄角旮旯

娉婷袅娜 涕泗滂沱

呶呶不休 不稂不莠

這首《生僻字》,考驗的是“國文”硬實力。倘若實力不夠,其實可以拿Python來湊,畢竟庫多!今天就來說一個有意思的pypinyin庫,名字很直白,是python版的拼音庫,用來将漢字轉為拼音。

先來看下代碼運作效果,比較喜歡将結果print到指令行中的樣式:

python将txt轉為字元串_Python玩轉《生僻字》

當然,正規的操作是讀取漢字txt文本,通過代碼生成注音txt文本:

python将txt轉為字元串_Python玩轉《生僻字》

思路

很簡單,拼音庫可以把漢字轉化為拼音,那我們要做的就是讀取文本,擷取拼音,最後将文本和拼音重新拼接。高深的算法沒有,基本圍繞字元串和清單的操作拼接,有興趣的朋友可以體驗下。

pypinyin庫

首先是安裝,pip install pypinyin

裝好後引入子產品from pypinyin import pinyin

調用 pinyin(“生僻字”),即可得到拼音清單 [['shēng'], ['pì'], ['zì']]

讀寫txt文本

基本是入門階段讀寫txt檔案的簡單應用:

txt_name = "生僻字"
with open("%s.txt"%txt_name,encoding="UTF-8-sig") as f:
    content = f.read()
    input_str = content
result = transfer(input_str)
print(result)
with open("%s_拼音.txt"%txt_name,'w',encoding='UTF-8-sig') as m:
    m.write(result)
           

拼接

首先會對讀入的文本進行整理,去除多餘的空格,将字元串中的漢字與清單中的拼音一一對應并拼接。

由于中文字元占兩個位元組,以及讀寫txt時會涉及到編碼格式,這部分代碼比較費功夫,隻能說勉強做到格式整齊吧。

def transfer(text):
    #去除字元串中空格
    no_space_text = ''.join(text.split(" "))
    raw_list = []
    temp = ""
    for i in range(len(no_space_text)):
        if is_Chinese(no_space_text[i]):
            if temp != "":
                raw_list.append(temp)
                temp=""
            raw_list.append(no_space_text[i])
        else:
            temp+=no_space_text[i]
    #生成拼音清單
    pylist = pinyin(no_space_text)

    #将拼音清單和字元串拼接對齊
    text_list = []
    pinyin_list = []

    for i in range(len(raw_list)):
        if is_Chinese(raw_list[i]):
            pinyin_list.append(pylist[i][0].ljust(6, ' '))
            text_list.append(raw_list[i].ljust(5,' '))
        else:
            pinyin_list.append(pylist[i][0])
            text_list.append(raw_list[i])

    pinyin_str = ''.join(pinyin_list)
    text_str = ''.join(text_list)

    pinyin_line_list = pinyin_str.split('n')
    text_line_list = text_str.split("n")
    final_result = ""
    for i in range(len(pinyin_line_list)):
        final_result += pinyin_line_list[i] + 'n' + text_line_list[i] + "n"
    return final_result
           

回顧

最初接觸一個讀取剪貼闆内容的pyperclip子產品,琢磨對剪貼闆中字元串如何操作。恰巧聽到《生僻字》,覺得既然逐字查拼音是個麻煩事,何不通過Python來批量添加拼音呢?很幸運,還真有大佬寫了這個pypinyin庫,在Github上也已有1500多顆星了~

昨天完成的部分代碼,是對剪貼闆中複制的内容添加拼音,感覺實用性不強且操作不友善,故今天修改為讀取txt文本生成注音版本。

代碼下載下傳

Github代碼下載下傳

代碼中有兩點,在這記錄下:

  1. 讀寫txt文檔時,encoding="UTF-8-sig"是為了去除utf-8帶的BOM頭'ufeff'
  2. 通常漢字都在'u4e00' 和 'u9fff之間,但是生僻字如“㙓” 位于拓展庫 'u3400' 到 'u4DB5'之間 參考連結

最後

最後再放個《離騷》文本的注音,先txt文本:

python将txt轉為字元串_Python玩轉《生僻字》

以及偏愛 的指令行 格式 :

python将txt轉為字元串_Python玩轉《生僻字》

後記:示例中,“腌臢”被注音成了"yan za",原因是該拼音庫隻 收錄了簡體版的“腌臜”并未有收“腌臢 ”,修改為簡體版後會顯示正常。