2016-07-31 13 views
1

テキストファイルとして保存された2冊の本に「the」という単語が表示される回数を数えようとしています。私が実行しているコードは、各書籍のゼロを返します。countメソッドを使ってテキストファイルの特定の単語を数えよう

は、ここに私のコードです:

def word_count(filename): 
    """Count specified words in a text""" 
    try: 
     with open(filename) as f_obj: 
      contents = f_obj.readlines() 
      for line in contents: 
       word_count = line.lower().count('the') 
      print (word_count) 

    except FileNotFoundError: 
     msg = "Sorry, the file you entered, " + filename + ", could not be  found." 
    print (msg) 

dracula = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\dracula.txt' 
siddhartha = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\siddhartha.txt' 

word_count(dracula) 
word_count(siddhartha) 

は私が間違ってここで何をやっていますか?

+0

いいえ。私はあなたの行を使ってインクリメントしようとしましたが、インクリメントする前にword_countを割り当てる必要がありました。だから私はそれ自身でword_countをインクリメントする2行目を追加し、それでも両方の本のために私にゼロを与えました。 –

答えて

1

各ファイルの最後の行に 'the'という単語が表示されていない限り、ゼロが表示されます。例えば

あなたはおそらく増強に加え(+=)を使用し、その後ゼロにword_count変数を初期化したい

def word_count(filename): 
    """Count specified words in a text""" 
    try: 
     word_count = 0          # <- change #1 here 
     with open(filename) as f_obj: 
      contents = f_obj.readlines() 
      for line in contents: 
       word_count += line.lower().count('the')  # <- change #2 here 
      print(word_count) 

    except FileNotFoundError: 
     msg = "Sorry, the file you entered, " + filename + ", could not be  found." 
    print(msg) 

dracula = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\dracula.txt' 
siddhartha = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\siddhartha.txt' 

word_count(dracula) 
word_count(siddhartha) 

拡張さらには、単に役に立つ必要はありません。このライン:

word_count += line.lower().count('the') 

word_count = word_count + line.lower().count('the') 

のように書くことができしかし、あなたはまた、一度にメモリに行すべてを読む必要はありません。ファイルオブジェクトから直接行を反復処理することができます。例:

def word_count(filename): 
    """Count specified words in a text""" 
    try: 
     word_count = 0 
     with open(filename) as f_obj: 
      for line in f_obj:      # <- change here 
       word_count += line.lower().count('the') 
     print(word_count) 

    except FileNotFoundError: 
     msg = "Sorry, the file you entered, " + filename + ", could not be  found." 
     print(msg) 

dracula = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\dracula.txt' 
siddhartha = 'C:\\Users\\HP\\Desktop\\Programming\\Python\\Python Crash Course\\TEXT files\\siddhartha.txt' 

word_count(dracula) 
word_count(siddhartha) 
+0

ありがとうございましたjedwards .... that worked :) –

3

繰り返しごとにword_countを割り当て直します。つまり、最後にファイルの最後の行にあるtheの出現回数と同じになります。あなたは合計を得ているはずです。別のもの:thereは一致する必要がありますか?おそらくそうではありません。おそらくline.split()を使用します。また、ファイルオブジェクトを直接反復処理することもできます。 .readlines()の必要はありません。最後に、単純化するためにジェネレータ式を使用します。私の最初の例は、ジェネレータの式がない場合です。第二はそれである:

def word_count(filename): 
    with open(filename) as f_obj: 
     total = 0 
     for line in f_obj: 
      total += line.lower().split().count('the') 
     print(total) 
def word_count(filename): 
    with open(filename) as f_obj: 
     total = sum(line.lower().split().count('the') for line in f_obj) 
     print(total) 
0
import os 
def word_count(filename): 
    """Count specified words in a text""" 
    if os.path.exists(filename): 
     if not os.path.isdir(filename): 
      with open(filename) as f_obj: 
       print(f_obj.read().lower().count('t')) 
     else: 
      print("is path to folder, not to file '%s'" % filename) 
    else: 
     print("path not found '%s'" % filename) 
関連する問題