python用一行代码编写一个回声程序_利用Python实现一个WC程序
項(xiàng)目要求
wc.exe 是一個(gè)常見(jiàn)的工具,它能統(tǒng)計(jì)文本文件的字符數(shù)、單詞數(shù)和行數(shù)。這個(gè)項(xiàng)目要求寫一個(gè)命令行程序,模仿已有wc.exe 的功能,并加以擴(kuò)充,給出某程序設(shè)計(jì)語(yǔ)言源文件的字符數(shù)、單詞數(shù)和行數(shù)。
實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)程序,它能正確統(tǒng)計(jì)程序文件中的字符數(shù)、單詞數(shù)、行數(shù),以及還具備其他擴(kuò)展功能,并能夠快速地處理多個(gè)文件。
基本功能列表
wordCounter.exe -c file.c //返回文件 file.c 的字符數(shù)
wordCounter.exe -w file.c //返回文件 file.c 的詞的數(shù)目
wordCounter.exe -l file.c //返回文件 file.c 的行數(shù)
擴(kuò)展功能
wordCounter.exe -s file //遞歸處理目錄下符合條件的文件。
wordCounter.exe -a file.c //返回更復(fù)雜的數(shù)據(jù)(代碼行 / 空行 / 注釋行)。
空行: 本行全部是空格或格式控制字符,如果包括代碼,則只有不超過(guò)一個(gè)可顯示的字符,例如`“{”`。
代碼行:本行包括多于一個(gè)字符的代碼。
注釋行: 本行不是代碼行,并且本行包括注釋。一個(gè)有趣的例子是有些程序員會(huì)在單字符后面加注釋:
`} // 注釋`,在這種情況下,這一行屬于注釋行。
fileName: 文件或目錄名,可以處理一般通配符
3. -x 參數(shù)。這個(gè)參數(shù)單獨(dú)使用。如果命令行有這個(gè)參數(shù),則程序會(huì)顯示圖形界面,用戶可以通過(guò)界面選取單個(gè)文件,程序就會(huì)顯示文件的字符數(shù)、行數(shù)等全部統(tǒng)計(jì)信息。
一、開(kāi)發(fā)前PSP表格預(yù)估
PSP2.1
Personal Software Process Stages
預(yù)估耗時(shí)(分鐘)
實(shí)際耗時(shí)(分鐘)
Planning
計(jì)劃
40
30
· Estimate
· 估計(jì)這個(gè)任務(wù)需要多少時(shí)間
630
750
Development
開(kāi)發(fā)
400
600
· Analysis
· 需求分析 (包括學(xué)習(xí)新技術(shù))
20
30
· Design Spec
· 生成設(shè)計(jì)文檔
30
30
· Design Review
· 設(shè)計(jì)復(fù)審 (和同事審核設(shè)計(jì)文檔)
20
30
· Coding Standard
· 代碼規(guī)范 (為目前的開(kāi)發(fā)制定合適的規(guī)范)
10
20
· Design
· 具體設(shè)計(jì)
30
60
· Coding
· 具體編碼
240
300
· Code Review
· 代碼復(fù)審
40
60
· Test
· 測(cè)試(自我測(cè)試,修改代碼,提交修改)
50
40
Reporting
報(bào)告
60
60
· Test Report
· 測(cè)試報(bào)告
30
40
· Size Measurement
· 計(jì)算工作量
30
20
· Postmortem & Process Improvement Plan
· 事后總結(jié), 并提出過(guò)程改進(jìn)計(jì)劃
30
30
合計(jì)
630
750
二、項(xiàng)目完成情況
編程語(yǔ)言:python
基本功能列表:
wordCounter.exe -c file.c //返回文件 file.c 的字符數(shù)(實(shí)現(xiàn))
wordCounter.exe -w file.c //返回文件 file.c 的詞的數(shù)目 (實(shí)現(xiàn))
wordCounter.exe -l file.c //返回文件 file.c 的行數(shù)(實(shí)現(xiàn))
擴(kuò)展功能:
wordCounter.exe -s file //遞歸處理目錄下符合條件的文件。(實(shí)現(xiàn))
wordCounter.exe -a file.c //返回更復(fù)雜的數(shù)據(jù)(代碼行 / 空行 / 注釋行)。(實(shí)現(xiàn))
空行: 本行全部是空格或格式控制字符,如果包括代碼,則只有不超過(guò)一個(gè)可顯示的字符,例如`“{”`。
代碼行:本行包括多于一個(gè)字符的代碼。
注釋行: 本行不是代碼行,并且本行包括注釋。一個(gè)有趣的例子是有些程序員會(huì)在單字符后面加注釋:
`} // 注釋`,在這種情況下,這一行屬于注釋行。
fileName: 文件或目錄名,可以處理一般通配符
3. -x 參數(shù)。這個(gè)參數(shù)單獨(dú)使用。如果命令行有這個(gè)參數(shù),則程序會(huì)顯示圖形界面,用戶可以通過(guò)界面選取單個(gè)文件,程序就會(huì)顯示文件的字符數(shù)、行數(shù)等全部統(tǒng)計(jì)信息。(未實(shí)現(xiàn))
三、項(xiàng)目設(shè)計(jì)
項(xiàng)目大致流程圖:
四、關(guān)鍵代碼
RecurveDir 函數(shù)查找文件夾下符合條件的文件,使用`glob`類匹配輸入的文件夾下的文件存在列表中,然后遍歷文件列表,從中遞歸查找符合條件的文件。
defRecurveDir(dirPath):"""遞歸查找符合條件的文件
:param:
dirPath: 目錄的路徑
:return: 符合條件的文件"""fileList=[]
pathFileInfo= "*.*"pathList= glob.glob(os.path.join(dirPath, '*'))for mPath inpathList:iffnmatch.fnmatch(mPath, pathFileInfo):
fileList.append(mPath)#print(fileList)
elifos.path.isdir(mPath):#print(mPath)
fileList +=RecurveDir(mPath)else:pass
return fileList
下面這段是統(tǒng)計(jì)代碼行,空行,注釋行的邏輯代碼,需要考慮的情況挺多,有單行注釋和多行注釋等
with open(fileName, 'r', encoding = 'utf-8') as f:for index, line in enumerate(f, start=1):
stripLine=line.strip()#判斷多行注釋是否開(kāi)始
if notisComment:if stripLine.startswith("'''") or stripLine.startswith('"""') or stripLine.startswith('/*'):
isComment=True
startComment=index#單行注釋,考慮多種情況
elif stripLine.startswith('#') or stripLine.startswith('//') or re.findall('^[}]+[\s\S]+[//]+', stripLine):
commentLines+= 1
elif stripLine == '' or stripLine == '{' or stripLine == '}':
blankLines+= 1
else:
codeLines+= 1
#多行注釋已經(jīng)開(kāi)始
else:if stripLine.endswith("'''") or stripLine.endswith('"""') or stripLine.endswith('*/'):
isComment=False
commentLines+= index -startComment + 1
else:pass
五、測(cè)試
運(yùn)行 python wordCounter.py -h
分別運(yùn)行
python wordCount.py -c wordtest.txt
python wordCount.py-w wordtest.txt
python wordCounr.py-l wordtest.txt
結(jié)果:
運(yùn)行:
python wordCount.py -s wordtest
python wordCount.py-a wordtest
python wordCount.py-a wordtest.txt
結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的python用一行代码编写一个回声程序_利用Python实现一个WC程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小麦草汁的功效与作用、禁忌和食用方法
- 下一篇: 小甲鱼python课后题答案_Pytho