1. 程式人生 > >Python統計一個英文文件中各單詞出現的行數

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) {