這是全棧數據工程師養成攻略系列教程的第五期:5 實戰 西遊記用字統計。javascript
咱們將經過一個簡單的實戰項目,來鞏固以前學習的Python基礎。java
所使用的數據能夠在個人Github上找到,github.com/Honlan/full…。將整個項目下載下來以後,裏面的data文件夾中便包含了課程所需的所有數據和文件。git
此次咱們將用到xyj.txt
,裏面是小說鉅著《西遊記》的文本內容,使用UTF8
編碼,文件大小爲2.2MB。文學大師吳承恩畢生的做品,現在用2M左右的文件就能夠所有存儲,這正是信息時代所帶來的進步和便利。github
咱們將讀入《西遊記》的文本內容,並進行如下統計:app
在xyj.txt
的同級目錄下,新建一個py
文件,而後開始寫代碼吧!less
首先,定義一個讀文件,讀取準備好的xyj.txt
。ide
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去完成一些你能想到的事情吧~
視頻連接:西遊記用字統計