簡體   English   中英

嘗試使用Python計算文件中的單詞

[英]Trying to count words in a file using Python

我試圖計算文件中“困難單詞”的數量,這需要我計算每個單詞中的字母數。 現在,我只想從一個文件中一次一個地獲取單個單詞。 我寫了以下內容:

file = open('infile.txt', 'r+')
fileinput = file.read()

for line in fileinput:
    for word in line.split():
        print(word)

輸出:

t
h
e

o
r
i
g
i
n

.
.
.

它似乎一次打印一個字符而不是一次打印一個字。 我真的想知道更多關於這里發生的事情。 有什么建議么?

使用splitlines()

fopen = open('infile.txt', 'r+')
fileinput = fopen.read()

for line in fileinput.splitlines():
    for word in line.split():
        print(word)

fopen.close()

沒有splitlines()

您還可以使用with語句打開該文件。 它自動關閉文件:

with open('infile.txt', 'r+') as fopen:
    for line in fopen:
        for word in line.split():
            print(word)

一個文件支持迭代協議,對於較大的文件,它比一次讀取內存中的整個內容要好得多

with open('infile.txt', 'r+') as f:
    for line in f:
        for word in line.split():
            print(word)

假設你要定義一個過濾函數,你可以沿着這條線做點什么

def is_difficult(word):
    return len(word)>5

with open('infile.txt', 'r+') as f:
    words = (w for line in f for w in line.split() if is_difficult(w))
    for w in words:
        print(w)

其中,輸入文件為

ciao come va
oggi meglio di domani
ieri peggio di oggi

產生

meglio
domani
peggio

你的代碼給你單個字符,因為你調用.read()將所有內容存儲為單個字符串,所以當你for line in fileinput你的字符串字符串char時,沒有充分的理由使用read和splitlines你可以簡單地遍歷文件對象,如果你想要一個你會稱之為readlines的行列表。

如果你想按長度分組單詞,使用單詞長度作為鍵的dict,你還需要刪除str.strip可以用的單詞中的標點符號:

def words(n, fle):
    from collections import defaultdict
    d = defaultdict(list)
    from string import punctuation
    with open(fle) as f:
        for line in f:
            for word in line.split():
                word = word.strip(punctuation)
                _len = len(word)
                if _len >= n:
                    d[_len].append(word)
    return d

您的dict將包含文件中按長度分組的所有單詞,並且所有單詞長度至少為n字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM