[英]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.