全棧 - 5 實戰 西遊記用字統計

這是全棧數據工程師養成攻略系列教程的第五期:5 實戰 西遊記用字統計。javascript

咱們將經過一個簡單的實戰項目,來鞏固以前學習的Python基礎。java

數據

所使用的數據能夠在個人Github上找到,github.com/Honlan/full…。將整個項目下載下來以後,裏面的data文件夾中便包含了課程所需的所有數據和文件。git

此次咱們將用到xyj.txt,裏面是小說鉅著《西遊記》的文本內容,使用UTF8編碼,文件大小爲2.2MB。文學大師吳承恩畢生的做品,現在用2M左右的文件就能夠所有存儲,這正是信息時代所帶來的進步和便利。github

目標

咱們將讀入《西遊記》的文本內容,並進行如下統計:app

  1. 共出現了多少個不一樣的漢字;
  2. 每一個漢字分別出現了多少次;
  3. 哪些漢字出現得最爲頻繁。

xyj.txt的同級目錄下,新建一個py文件,而後開始寫代碼吧!less

步驟

首先,定義一個讀文件,讀取準備好的xyj.txtide

fr = open('xyj.txt', 'r')複製代碼

準備一個列表characters和一個字典stat,分別用來記錄所出現的漢字和每一個漢字出現的次數。函數

characters = []
stat = {}複製代碼

接下來遍歷讀文件中的每一行,並進行統計。統計結果顯示,《西遊記》中共出現了4511個不一樣的漢字。學習

for line in fr:
    # 去掉每一行兩邊的空白
    line = line.strip()

    # 若是爲空行則跳過該輪循環
    if len(line) == 0:
        continue

    # 將文本轉爲unicode,便於處理漢字
    line = unicode(line)

    # 遍歷該行的每個字
    for x in xrange(0, len(line)):
        # 去掉標點符號和空白符
        if line[x] in [' ', '\t', '\n', '。', ',', '(', ')', '(', ')', ':', '□', '?', '!', '《', '》', '、', ';', '「', '」', '……']:
            continue

        # 還沒有記錄在characters中
        if not line[x] in characters:
            characters.append(line[x])

        # 還沒有記錄在stat中
        if not stat.has_key(line[x]):
            stat[line[x]] = 0
        # 漢字出現次數加1
        stat[line[x]] += 1

print len(characters)
print len(stat)複製代碼

接下來對stat按值進行排序,排序以後會獲得一個列表,由於字典是無序的,而列表是有序的。編碼

# lambda生成一個臨時函數
# d表示字典的每一對鍵值對,d[0]爲key,d[1]爲value
# reverse爲True表示降序排序
stat = sorted(stat.iteritems(), key=lambda d:d[1], reverse=True)複製代碼

定義一個寫文件,將統計和排序結果寫入文件。

fw = open('result.csv', 'w')
for item in stat:
    # 進行字符串拼接以前,須要將int轉爲str
    fw.write(item[0] + ',' + str(item[1]) + '\n')複製代碼

最後,記得關閉讀文件和寫文件。

fr.close()
fw.close()複製代碼

總結

經過這樣的一個簡單項目,咱們溫習了Python中的讀文件和寫文件,列表和字典的使用,以及字典的排序等內容。Python的功能很強大,打開你的腦洞,用Python去完成一些你能想到的事情吧~

視頻連接:西遊記用字統計

若是以爲文章不錯,不妨點一下左下方的喜歡~

相關文章
相關標籤/搜索