软工作业2:个人编程练习

1、process_file()

作用:按路径打开相应文件并将文件内容写入缓冲区;

def process_file(dst):  # 读文件到缓冲区
    try:  # 打开文件
        f = open(dst, 'r')  # dst为文本的目录路径
    except IOError as s:
        print(s)
        return None
    try:  # 读文件到缓冲区
        bvffer = f.read()
    except:
        print('Read File Error!')
        return None
    f.close()
    return bvffer

2、process_buffee()

作用: .split()函数将bvffer切片,处理缓冲区 bvffer代码,统计每个单词的频率;

def process_buffer(bvffer);
    if bvffer:
        word_freq = {}  # 新建一个空字典word_freq
        # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
        for word in bvffer.split():  # .split()函数将bvffer切片
            if word not in word_freq:
                word_freq[word] = 0
            word_freq[word] += 1
        return word_freq

3、output_result()

作用:输出文件中统计次数排名前十的单词及出现次数;

def output_result(word_freq):
    if word_freq:
        sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)
        for item in sorted_word_freq[:10]:  # 输出 Top 10 的单词
            print(item)

4、main()

作用:调用函数

def main():
    dst = "D:/Gone_with_the_wind.txt"
    bvffer = process_file(dst)
    word_freq = process_buffer(bvffer)
    output_result(word_freq)


if __name__ == "__main__":
    import cProfile
    import pstats

    cProfile.run("main()", filename="result.out")
    p = pstats.Stats('result.out')  # 创建Stats对象
    p.sort_stats('calls').print_stats(10)  # 按调用次数排序,打印前10函数的信息
    p.strip_dirs().sort_stats("cumulative", "name").print_stats(10)  # 按运行时间和函数名进行排序,打印前10行函数的信息
    p.print_callees("process_buffer")  # 查看process_buffer()函数中调用的函数

二、代码风格说明

1.采用四个空格作为缩进

2.一行代码不要超多79个字符

3.使用空行分割类,函数,以及大块代码

4.注释独占一行

5.使用文档字符串

6.操作符的两侧,逗号后面都要加空格(但是括号的里侧是不加的)

7.统一的函数和类命名:类名采用驼峰 式,方法和函数的命名方式是小写字符加下划线,总是用self作为方法的第一个参数

三、程序运行命令、运行结果截图 

  

 四、性能分析结果及改进 

1、寻找执行时间最长:

def process_buffer(bvffer):
    if bvffer:
        word_freq = {}                     #新建一个空字典word_freq
        # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
        for word in bvffer.split():      #.split()函数将bvffer切片
            if word not in word_freq:
                word_freq[word]=0
            word_freq[word]+=1
        return word_freq

2、次数最多的部分代码

 
           sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)

3、改进代码

使用process_buffer函数进行改进 而不是使用.lower()将句首的大写字母改为小写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值