2015-11-04 45 views
4

我正在嘗試計算文件中「難度單詞」的數量,這需要我計算每個單詞中的字母數。現在,我只是試圖從文件中逐個獲取單個單詞。我已經寫了以下內容:嘗試使用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 

. 
. 
. 

這似乎是在同一時間,在一次打印一個字符,而不是一個字。我真的很想知道更多關於這裏實際發生的事情。有什麼建議麼?

+1

嘗試打印每一行,看看它是什麼;) – alfasin

回答

6

使用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 open('infile.txt', 'r+') as fopen: 
    for line in fopen: 
     for word in line.split(): 
      print(word) 
+0

這工作完美;謝謝。我不知道這種方法。 – AustinC

+0

我的榮幸@AustinC –

3

的文件支持迭代協議,這對於大文件要比讀取內存中的全部內容在一個去

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 
+1

啊,我明白了。我對Python還是比較新的,所以我正在採取正確的方式來編寫腳本。你的例子非常有幫助;謝謝。 – AustinC

+0

歡迎您。順便說一句,你爲什麼在輸入文件上使用模式'r +'?你打算寫信給它嗎? – Pynchia

+0

最初,是的,我做到了。但我想我會用另一個文件來輸出,只是爲了讓事情更清潔。我一定會改變它。 – AustinC

0

你的代碼是給你一個字符,因爲你叫.read()其中存儲的所有內容作爲單個字符串,所以當你for line in fileinput你迭代通過字符串字符,沒有如果您確實需要一個可以調用readlines的行的列表,那麼使用讀取和拆分行的原因很簡單,就是遍歷文件對象。

如果要組詞的長度用這個詞作爲密鑰的長度使用的字典,你將要還從話,你可以用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 

你的字典將包含按長度分組的文件中的所有單詞,並且全部至少包含n個字符。

相關問題