작품 03의 두 번째 주

운영 요구 사항을 참조하십시오 https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583

[코드를 참조하십시오

첫째, 프로그램

이 프로그램의 주요 기능입니다 :

 

DEF (argv와) 주 :
     IF (LEN (argv와) == 1.) :               #가 직접 입력 (4)의 기능을 수행 
        Str0 = 입력 () 
        Str0 =의 re.sub ( ' [^ A-ZA-는 Z] ' , '  ' , Str0 ) 
        리디렉션 (Str0) 
        
    ELIF 합니다 (sys.argv에의 == 1.] ' -s ' ) :    
        
        IF (LEN (argv와) == 2) :            #이 파일 경로 (4)의 기능을 수행 

            STR1 = INPUT () 
            STR1 =의 re.sub를 ( ' [^ A-ZA-는 Z] ' , '  ' , STR1) 
            리디렉션 (STR1)

        다른 :                        #이 기능을 수행 하나. 
              file_name1 = argv와 [2 ] 
              put_total (file_name1) 
              put_1to10 (file_name1) 

    ELIF (STR (os.path.exists합니다 (sys.argv에의)) == 1.] ' ' ) : #의 . 집행 기능 3 
        get_folder_filename을 (argv와의 [1. ]) 

    다른 :                            #이 기능을 수행 2 
        file_name2 = argv와의 + [1.] " 가 .txt " 
        put_total_plush (file_name2) 
        put_1to10 (file_name2) 
            
IF  __name__ == " __main__ " :
    
    주 (sys.argv에)

 

 

함수

  키 어려운 : 1, 2 커맨드 라인 입력, 전용 액세스 글자를 반복하고 여기에 계산되지 파이썬 내장 카운터 기능 내가 사용하기 전에 카운터가뿐만 아니라, 처리를 위해 정규 표현식을 사용하여이 문제 3에 대한 좋은 해결책이 될 수 사용 문자 이외의 공백으로 대체됩니다.

니펫

 

import sys
import os
import re
import fileinput
import codecs
#超级好用的自带计数器
from collections import Counter 

#以字符串形式获取文件中的内容
def get_txt(file_name):
    with codecs.open(file_name,'r',encoding='utf-8') as fo:
        str1 = fo.read()
        str1 = re.sub('[^a-zA-Z]',' ',str1)  #通过正则表达式 去除 除字母以外的字符
        return str1

#通过Counter返回个字典类型对象
def con(file_name):
    txt = get_txt(file_name)
    count = Counter(txt.split())
    return count

#按出现次数排序(通过调用内置的方法)
def put_1to10(file_name):
    
    
    dic=con(file_name).most_common(10)      #dic列表里面存的是元组
    for each in dic:
        print(each[0],each[1])
        

#返回不重复的单词个数(用于功能一)
def put_total(file_name):
    print("total:",len(con(file_name)))

 

 

功能一执行图:

 

功能二

  重点难点:1、只读取文件名 需要自己加 .txt

代码片段:

#返回包括重复的单词个数
def put_total_plush(file_name):
    print("total:",len(list(con(file_name).elements())))

功能二执行图:

 

功能三

重点难点:1、需要获取文件夹的路径 对路径要加以处理  2、用列表存取文件夹下的文本路径 

代码片段:

#用于文件夹功能
def get_folder_filename(folder_name):
    current_path = os.path.abspath('.')
    current_path = current_path.replace('\\','/') + '/'+ folder_name + '/'
    folder_list = []
    folder_path = os.listdir(current_path)

    for f in folder_path:
        folder_list.append(f)

    for i in folder_list:
        print(i)

    for j in folder_list:
        print(j)
        put_total_plush(current_path+j)
        put_1to10(current_path+j)

 

功能三执行图:

 

功能四

重点难点:1、重定向传入 用input()接收 2、在main里作判断 如main中代码所示 3、到目前还未实现 将文件全部传入 用fileinput.input()获得对象 进行遍历到 可以实现 但在该代码中,这样做会影响 argv[]的不确定 无法实现main里的判断 个人能力有限经过查询也没找到合适方法。

代码片段:

#用于重定向
def redirect(str1):
    count = Counter(str1.split())
    print("total:",len(list(count.elements())))
    list1 = count.most_common(10)
    for each in list1:
        print(each[0],each[1])

执行效果图:

二、PSP

类别 预计花费时间(min) 实际花费时间(min) 分析差距原因
功能一 30 50min 刚开始对题目没有很好的理解,但经过反复试验后找到了很好的可行方式。
功能二 60 90min 在该功能中重新写了输出total的函数 在作业要求里反复查看发现, 除了功能一之外 total均要返回单词总数。
功能三 50 120min 在该功能中不了解获取当前目录以及以下的文件 相对知识欠缺是 费时的最大原因
功能四 60 180min 在该功能中实现通过命令行读取文件中的全部内容比较耗时 
测试/调试 100 180min 在各功能实现后发现细节错误很多,初期没有考虑全面。自己写的代码易读性较差,自己修改时 比较费劲。

三、总结

  经过该程序的锻炼学会了很多东西。学会了怎样通过查资料来解决没遇见过的问题, 本次训练也对以前的知识加以巩固,同时也让自己感到自己编程很菜、思路不清晰、代码自己看着都蒙。相信在通过大量练习之后会有所提高。最后 感觉写博客比编程序更难。

 

추천

출처www.cnblogs.com/chijw123/p/11533060.html