果然!還是沒法繞開正則表達式啊!!!!!!這下接着學習了!!!!!
題目 :任一個英文的純文本文件,統計其中的單詞出現的個數。
代碼是我從別的博客上借鑒的,了解到需要用到的知識點有: 文件讀寫、splitlines()的用法、 re.sub()的用法、原生字符串r''的用法、重新復習字典的用法等等
下邊一個個的分析:
1.文件讀寫:
import sys
# file=open('G:\python文件\poem.txt','r')
# print(file.read())
#下邊是另外一種寫法
#read(size)方法,每次最多讀取size個字節的內容
#調用readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容並按行返回list
# with open('G:\python文件\poem.txt')as f:
# print(f.read(10))
# file=open('G:\python文件\poem.txt','r')
# for line in file.readlines():
# print(line)
#前邊說的是二進制字符 如果是文字呢? 后邊加‘rb’
# file=open('G:\python文件\image.png','rb')
# print(file.read())
#寫文件也是一樣 就是把'r'換成'w'
2.splitlines()方法
返回一個列表,將每一行都寫在列表的一個元素里,可以設置‘\n’是否可見
import sys
with open("G:\python文件\poem.txt") as f:
print(f.read().splitlines())
Programming is fun.
When the "work" is done-
load
if you wanna make your work also fun:
use Python python python!
結果:
['Programming is fun.', 'When the "work" is done-', 'load ', 'if you wanna make your work also fun:', ' use Python python python!', '']
3. re.sub()的用法 是用來替換字符串:
比如說s1=' abc123cde456 ' 想要將數字都改成222的話 就要用到這個 re.sub('\d+','222',s1) 其中,最重要的是第一個參數,也就是匹配正則表達式
這里有一個知識點是原生字符串 格式就是r' ' 引號里如果有轉義字符串不想被轉義的話 就不必在前邊再加轉義字符了#原生字符串r'' 與轉義符 \
s1=r'abc\abc'
print(s1)
s2='abc\\abc'
print(s2)
s3='abc\'nabc'
print(s3)
s4='ab\\\\cd\\\\ef'print(s4)
關於正則表達式,要學習的東西還有很多很多,一定要抽時間把這些東西弄明白!真的很重要!!!
4.字典的用法
dic.setdefault(word.lower(), 0) 這句話的意思是 如果dictionary里邊沒有某word.lower的鍵值對,就添加上 ,默認value是0 而dic[]就是設置value的值
dic[word.lower()]
import re
def get_word_frequencies(file_name):
dic = {}
txt = open(file_name, 'r').read().splitlines() #轉化為列表
print(txt)
n=0
for line in txt: #line就是每一行的字符
line = re.sub(r'[.?()!,"/]', ' ', line) #要替換的標點符號,英文字符可能出現的
line = re.sub(r' - ', ' ', line) #替換單獨的‘-’
for word in line.split():
if word[-1] =='-': #當一行的最后一個字符是-的時候,需要跟下一個英文字符串聯起來構成單詞
m=word[:-1]
n=1
break
if n==1:
word=m+word
n=0
print (word)
dic.setdefault(word.lower(), 0) #不區分大小寫 如果鍵不存在於字典中,將會添加鍵並將值設為默認值。
dic[word.lower()] += 1 #dic[]是用來查value的
print(dic) #統計每個單詞出現的次數
get_word_frequencies("G:\python文件\poem.txt")
