python用一行代码编写一个回声程序_利用Python实现一个WC程序
項目要求
wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe 的功能,并加以擴充,給出某程序設計語言源文件的字符數、單詞數和行數。
實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具備其他擴展功能,并能夠快速地處理多個文件。
基本功能列表
wordCounter.exe -c file.c //返回文件 file.c 的字符數
wordCounter.exe -w file.c //返回文件 file.c 的詞的數目
wordCounter.exe -l file.c //返回文件 file.c 的行數
擴展功能
wordCounter.exe -s file //遞歸處理目錄下符合條件的文件。
wordCounter.exe -a file.c //返回更復雜的數據(代碼行 / 空行 / 注釋行)。
空行: 本行全部是空格或格式控制字符,如果包括代碼,則只有不超過一個可顯示的字符,例如`“{”`。
代碼行:本行包括多于一個字符的代碼。
注釋行: 本行不是代碼行,并且本行包括注釋。一個有趣的例子是有些程序員會在單字符后面加注釋:
`} // 注釋`,在這種情況下,這一行屬于注釋行。
fileName: 文件或目錄名,可以處理一般通配符
3. -x 參數。這個參數單獨使用。如果命令行有這個參數,則程序會顯示圖形界面,用戶可以通過界面選取單個文件,程序就會顯示文件的字符數、行數等全部統計信息。
一、開發前PSP表格預估
PSP2.1
Personal Software Process Stages
預估耗時(分鐘)
實際耗時(分鐘)
Planning
計劃
40
30
· Estimate
· 估計這個任務需要多少時間
630
750
Development
開發
400
600
· Analysis
· 需求分析 (包括學習新技術)
20
30
· Design Spec
· 生成設計文檔
30
30
· Design Review
· 設計復審 (和同事審核設計文檔)
20
30
· Coding Standard
· 代碼規范 (為目前的開發制定合適的規范)
10
20
· Design
· 具體設計
30
60
· Coding
· 具體編碼
240
300
· Code Review
· 代碼復審
40
60
· Test
· 測試(自我測試,修改代碼,提交修改)
50
40
Reporting
報告
60
60
· Test Report
· 測試報告
30
40
· Size Measurement
· 計算工作量
30
20
· Postmortem & Process Improvement Plan
· 事后總結, 并提出過程改進計劃
30
30
合計
630
750
二、項目完成情況
編程語言:python
基本功能列表:
wordCounter.exe -c file.c //返回文件 file.c 的字符數(實現)
wordCounter.exe -w file.c //返回文件 file.c 的詞的數目 (實現)
wordCounter.exe -l file.c //返回文件 file.c 的行數(實現)
擴展功能:
wordCounter.exe -s file //遞歸處理目錄下符合條件的文件。(實現)
wordCounter.exe -a file.c //返回更復雜的數據(代碼行 / 空行 / 注釋行)。(實現)
空行: 本行全部是空格或格式控制字符,如果包括代碼,則只有不超過一個可顯示的字符,例如`“{”`。
代碼行:本行包括多于一個字符的代碼。
注釋行: 本行不是代碼行,并且本行包括注釋。一個有趣的例子是有些程序員會在單字符后面加注釋:
`} // 注釋`,在這種情況下,這一行屬于注釋行。
fileName: 文件或目錄名,可以處理一般通配符
3. -x 參數。這個參數單獨使用。如果命令行有這個參數,則程序會顯示圖形界面,用戶可以通過界面選取單個文件,程序就會顯示文件的字符數、行數等全部統計信息。(未實現)
三、項目設計
項目大致流程圖:
四、關鍵代碼
RecurveDir 函數查找文件夾下符合條件的文件,使用`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
下面這段是統計代碼行,空行,注釋行的邏輯代碼,需要考慮的情況挺多,有單行注釋和多行注釋等
with open(fileName, 'r', encoding = 'utf-8') as f:for index, line in enumerate(f, start=1):
stripLine=line.strip()#判斷多行注釋是否開始
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
#多行注釋已經開始
else:if stripLine.endswith("'''") or stripLine.endswith('"""') or stripLine.endswith('*/'):
isComment=False
commentLines+= index -startComment + 1
else:pass
五、測試
運行 python wordCounter.py -h
分別運行
python wordCount.py -c wordtest.txt
python wordCount.py-w wordtest.txt
python wordCounr.py-l wordtest.txt
結果:
運行:
python wordCount.py -s wordtest
python wordCount.py-a wordtest
python wordCount.py-a wordtest.txt
結果:
總結
以上是生活随笔為你收集整理的python用一行代码编写一个回声程序_利用Python实现一个WC程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小麦草汁的功效与作用、禁忌和食用方法
- 下一篇: 牙套扎嘴怎么办