果然!还是没法绕开正则表达式啊!!!!!!这下接着学习了!!!!!

题目 :任一个英文的纯文本文件,统计其中的单词出现的个数。

代码是我从别的博客上借鉴的,了解到需要用到的知识点有: 文件读写、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")