Python統計一個英文文件中各單詞出現的行數
在網上看到一個人求的大作業,要求是這樣的:
讀入一個英文的文件,然後建立一個單詞引用索引表,也就是說,對於該文件中出現的所有單詞,按照字母順序進行排序,並且每個單詞後面跟著它在文件中出現的行號。然後把這個索引表顯示出來,同時儲存在一個輸出檔案中。為了方便處理,假定文件長度不超過1000個字元,行數不超過20行,文件中的單詞最長不超過20個字母。噪聲單詞,如“a, an, and, are, in, is, of, or, that, the, this, to, have”等單詞不出現。
比如讀入的是1.txt,則輸出的單詞索引表為2.txt
其實這個大作業要求是用C語言來完成的,我嘗試了一下用Python來實現:
def analysisline(aline):
newline = ''
for c in aline:
if c.isalpha():
newline += c
else:
newline += ' '
wordlist = newline.split()
for strt in wordlist:
for listt in data:
if strt.lower() in listt:
listt.append(lineindex)
break
else:
if strt.lower() not in outword:
data.append([strt.lower(), lineindex])
outword = ['a', 'an', 'and', 'are', 'in', 'is', 'of', 'or', 'that', 'the', 'this', 'to', 'have']
file1 = open("1.txt")
data = []
lineindex = 0
while True:
line = file1.readline()
if not line:
break
lineindex += 1
analysisline(line)
file1.close()
data.sort()
file2 = open("2.txt", "w")
firstc = ''
for inlist in data:
if inlist[0][0] != firstc:
firstc = inlist[0][0]
file2.write("\n********************* ")
file2.write(inlist[0][0].upper())
file2.write(" *********************\n")
word = inlist[0]
while len(word)<30:
word += '-'
file2.write(word)
for element in inlist:
if str(element).isdigit():
file2.write(' '+str(element))
file2.write("\n")
file2.close()
其實看起來還是很囉嗦,主要是對字串的操作還不是很熟悉。Python提供了很多對字串的操作,這已經大大簡化了平時對字串的處理,因為這個操作實在是太多了。
在程式中用了一個列表data來儲存需要寫要檔案2.txt中的資料,data中的元素又是一個列表,其第一個元素是統計到的單詞,其他的元素就是這個單詞的所在行。在構建data列表的時候,首先是一行一行的讀出檔案的內容,然後對每一行進行處理,把每行中的非字母字元都換成空格,然後對這個新的字串按空格進行分隔得到一個單詞的列表。對列表的單詞進行遍歷,加入到data列表中,同時記錄這個此時的行數。當然,因為統計單詞不需要區分大小 寫,所以在把單詞加入到列表的時候全都轉為了小寫,這樣,後面只要啟用一個sort函式就可以對列表進行排序了。輸出到檔案的時候,先按照單詞的首字母列印一個表頭,然後取出單詞填充字元'-'直到30個字元為止,後面緊跟所在行。這樣就把所有的資料輸出到了檔案 2.txt中。
其中在用到open函式的時候還出現了一個失誤,原本以為用'w'模式開啟檔案的時候,每write一次都要把原來的內容清除掉。實際上是隻有在open函式呼叫的時候會把原來檔案的內容清除掉,而wirte函式需要注意的是其引數只能是str型別。另外還有len函式,開始是用str.len()來呼叫,出現異常,正確用法是len(str)。
相關推薦
Python統計一個英文文件中各單詞出現的行數
在網上看到一個人求的大作業,要求是這樣的: 讀入一個英文的文件,然後建立一個單詞引用索引表,也就是說,對於該文件中出現的所有單詞,按照字母順序進行排序,並且每個單詞後面跟著它在文件中出現的行號。然後把這個索引表顯示出來,同時儲存在一個輸出檔案中。為了方便處理,假定文件長度不
awk命令之 - 統計/etc/passwd文件中各用戶所使用的shell類型及出現次數
linux 命令 awk 統計/etc/passwd文件中各用戶所使用的shell類型及出現次數awk -F: ‘BEGIN{printf"%-15s\t%s\n","ShellType","Count"}{shellType[$NF]++}END{for(i in shellType)print
用python把一個txt文件中所有逗號,替換成空格?
image split() 技術分享 pytho pre ron lines mark class 1 string = "word 2 3 4 5 6 7" 2 string = ",".join(string.split()) 3
python 一個.py文件如何調用另一個.py文件中的類和函數
技術分享 https log details com name 如何 mage nbsp 原文地址https://blog.csdn.net/winycg/article/details/78512300 在同一個文件夾下 調用函數: python
通過PHP把一篇英文文件中所有單詞的首字母轉為大寫
index.php程式碼如下: <?php header("Content-type: text/html; charset=utf8"); &n
python將一個txt文件的內容轉為字典格式/將字典格式儲存到txt文件中
# -*- encoding: gbk -*- def load_dict_from_file(filepath): _dict = {} try: with
如何在一個js文件中引入另外的js文件
ont logs clas lan pst brush 例如 b- spa 例如想要在a.js中引用b.js、c.js和d.js document.write("<script language=‘javascript‘ src=‘b.js‘></s
Java關於條件判斷練習--統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內)
stat 註釋 string 字符 條目 pub isf exc system 要求:統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內) 分析:先封裝一個靜態方法用於統計確定的.java文件的有效代碼行數。使用字符緩沖流讀取文件,首先判斷是
Python將一個大文件按段落分隔為多個小文件的簡單方法
解決 list 之前 一點 open ews 切片 compile popu 今天幫同學處理一點語料。語料文件有點大,而且是以連續兩個換行符作為段落標誌,他想把它按段落分隔成多個小文件。即每3個段落組成一個新文件。因為曾經沒有遇到過類似的操作,在網上找了
用python比較兩個文件中內容的不同之處, 並輸出行號和內容.
exist file diff pre ffline += == list cmp 代碼部分: ‘‘‘cmpfile.py - 比對兩個文件, 如果有不同之處, 打印內容和行號‘‘‘ import os class cmpFile: def __init__(
編寫一個程序,將 a.txt 文件中的單詞與 b.txt 文件中的單詞交替合並到 c.txt 文件中,a.txt 文件中的單詞用回車符分隔,b.txt 文件中用回車或空格進行分隔。
程序 AD res exception oid lin spl 一個 path import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader;
python交互環境中導入文件中自定義的函數報錯
ror return 編輯器 src per code 文件刪除 import png 今天在學習python自定義函數時,遇到一個問題:我用notepad++編輯器自定義的函數,在交互環境下使用from 文件名 import 函數名 導入時,一直報錯,檢查了好幾遍,一直報
python:將txt文件中是數值型資料讀入到array陣列中
1.介紹我的txt檔案內容是這樣的,準確來說是在excle表格中複製貼上到txt文件中的(這裡的一列介紹excle中的一列,一行就是excle中的一行),如圖所示:2.執行如下程式碼,特別說明一下,k值
一個word文件中,多個表格的批量調整(根據視窗調整表格和新增表格水平線)
Sub 自動調整所有表格() ' ' 自動調整所有表格 巨集 ' 'Application.Browser.Target = wdBrowseTable For i = 1 To ActiveDoc
十進位制轉化成2,8,16進位制數工具。將程式碼全部複製到一個txt文件中儲存,並將檔案字尾.txt改為.html,再瀏覽器開啟即可
<!DOCTYPE html> <html lang="en"> <head> <meta charset="GBK"> <meta http-equiv="X-UA-Compatible" content="IE=ed
C語言K&R習題系列——統計文件中每個單詞所包含的字母個數,以直方圖形式輸出
原題: Write a program to print a histogram of the lengths of words in its input. It is easy to draw
統計一TXT文件中單詞出現頻率,輸出頻率最高的10個單詞
實驗過程 主要思路就是首先將標點符號,常用冠詞等替換掉,然後利用雜湊表和陣列原理排序,輸出最高頻率的前十個陣列 程式碼如下 import java.io.BufferedReader; import java.io.File; import java.io.Fil
Aspose.Words:如何新增另一個WORD文件中的Node物件
首先看一段程式碼,這段程式碼意圖從docSource中獲取第一個表格,並插入docTarget的末尾: 1 var table = (Table)docSource.GetChild(NodeType.Table, 0, true); 2 docTarget.Fir
在文件中的指定位置寫入數據
logs 括號 指定位置 當前 class 區域 pre 否則 寫入 筆者的應用場景:將圖像指定區域的像素值按其空間位置寫到 txt 文件中。 int hang = 4; // 矩陣行數 int lie = 8; // 矩陣列數 // 先在txt文件中構造一個空矩陣
go源文件中是否有main函數
new urn turn 函數 name nbsp spa ret file import ( "go/parser""go/token" "go/ast" ) func HasMain(file string) (bool, error) {