python練習冊0004題
阿新 • • 發佈:2018-12-17
在任意一個英文文件中,統計單詞出現的次數,
分析:
本題不是很難,單詞通常以空格隔開,但是有些單詞後面跟一些特殊符號,只需把這些特殊符號替換掉就可以了,
程式碼一
1 import re 2 3 file_name = 'code.txt' 4 5 lines_count = 0 6 words_count = 0 7 chars_count = 0 8 words_dict = {} 9 lines_list = [] 10 11 with open(file_name, 'r') as f: 12 for line in f: 13 lines_count = lines_count + 1 14chars_count = chars_count + len(line) 15 match = re.findall(r'[^a-zA-Z0-9]+', line) 16 17 #正則 re.findall 的簡單用法(返回string中所有與pattern相匹配的全部字串,返回形式為陣列)語法: 18 for i in match: 19 # 只要英文單詞,刪掉其他字元 20 line = line.replace(i, ' ') 21 lines_list = line.split()22 for i in lines_list: 23 if i not in words_dict: 24 words_dict[i] = 1 25 else: 26 words_dict[i] = words_dict[i] + 1 27 28 print('words_count is', len(words_dict)) 29 print('lines_count is', lines_count) 30 print('chars_count is', chars_count)31 32 for k, v in words_dict.items(): 33 print( k, v)
該程式碼有些囉嗦,網上找的,說下思路把,利用正則表示式找到所有的不是字母也不是數字的資料儲存下來,然後再訪問文字中的資料,將非字母和數字的資料替換為空
弱弱的說一句,直接替換掉不就完了。
程式碼二:
這是本人所寫的,較程式碼一稍微簡潔些;
import re f=open("code.txt",'r') s=f.read() s.replace("[^a-zA-Z]",' ') s=s.split() word={} for i in s: if i not in word: word[i]=1 else: word[i]=word[i]+1 for k,v in word.items(): print(k,v)
程式碼三:
你以為你寫的夠簡潔了嗎?不,python早就幫你封裝好函數了。
點開才能看。
import collections import re def calwords(path): word = [] with open(path) as file: data = file.readlines() for line in data: word += re.split(' |,',line.strip('\n')) print(collections.Counter(word)) if __name__ == '__main__': calwords('e://code.txt')View Code
用到的方法說明
正則 re.findall 的簡單用法(返回string中所有與pattern相匹配的全部字串,返回形式為陣列) 語法:findall(pattern, string, flags=0) string的replace方法,用後一個引數替換字串中的前一個引數。
string.split方法
str.split() 單一分隔符,使用str.split()即可 str.split不支援正則及多個切割符號,不感知空格的數量 re.split() 多個分隔符,複雜的分隔情況,使用re.split 原型: re.split(pattern, string, maxsplit=0) 通過正則表示式將字串分離。如果用括號將正則表示式括起來,那麼匹配的字串也會被列入到list中返回。maxsplit是分離的次數,maxsplit=1分離一次,預設為0,不限制次數。 eg: >>>a='w w w' >>>import re 1.空格分 >>>re.split(r'[\s]',a) ['w','w','w'] 2.只分割一次 >>>re.split(r'[\s]',a,1) ['w','ww'] 3.多個字元分割 >>>c='[email protected]%w^w' >>>re.split(r'[[email protected]%^],c) ['w','w','w','w','w'] 4.還原?: >>>re.split(r'(?:[email protected]%^),c) ['[email protected]%w^w']
描述
Python strip() 方法用於移除字串頭尾指定的字元(預設為空格或換行符)或字元序列。
注意:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。
couter 是一個容器,可以統計列表中元素的出現次數.