2012-04-01 6 views
0

ディレクトリ内の多くのファイルの語数を取得するスクリプトを作成しようとしています。私はそれが私が望むものにかなり近く働いているが、私を捨てている部分がある。コードは今のところです:これは、「output.txtと」という名前のファイルにワードカウントを書き込み、私にこのような出力できますPythonのワードカウントの改行

import glob 

directory = "/Users/.../.../files/*" 
output = "/Users/.../.../output.txt" 

filepath = glob.glob(directory) 

def wordCount(filepath): 
    for file in filepath: 
     name = file 
     fileO = open(file, 'r') 
     for line in fileO: 
      sentences = 0 
      sentences += line.count('.') + line.count('!') + line.count('?') 

      tempwords = line.split() 
      words = 0 
      words += len(tempwords) 

      outputO = open(output, "a") 
      outputO.write("Name: " + name + "\n" + "Words: " + str(words) + "\n") 

wordCount(filepath) 

Name: /Users/..../..../files/Bush1989.02.9.txt 
Words: 10 
Name: /Users/..../..../files/Bush1989.02.9.txt 
Words: 0 
Name: /Users/..../..../files/Bush1989.02.9.txt 
Words: 3 
Name: /Users/..../..../files/Bush1989.02.9.txt 
Words: 0 
Name: /Users/..../..../files/Bush1989.02.9.txt 
Words: 4821 

をそしてこれは、各ファイル内のために繰り返されますディレクトリ。ご覧のように、それは私に各ファイルのための複数のカウントを与える。

議会

2月9日の合同セッションの前に、管理目標の住所、1989

氏スピーカー、議長、および家の著名なメンバーと:ファイルは、次のようなフォーマットされています 上院...

だから、3に、スクリプトは、そのような最初の行の10個の言葉として、私は改行に0をファイルの各「パート」の数を与えているようです次は、neの0 xtを入力し、本文の件数を入力します。

私が探しているのは、各ファイルの1つのカウントです。どんな助けや方向性もありがとうございます。

+1

'X = 0'と同じループで 'X + = something'続いまったく意味をなさない。 – tokland

答えて

0

ファイル名と単語数を表示する内側ループの最後の2行は、内側ループではなく外側ループの一部でなければなりません。つまり、1行に1回実行されます。

また、各行の文章と語句数をリセットしています。これらの文章は、内側ループの開始前に外側ループ内にある必要があります。ここで

は、あなたのコードは、変更後にどのように見えるかです:

import glob 

directory = "/Users/.../.../files/*" 
output = "/Users/.../.../output.txt" 

filepath = glob.glob(directory) 

def wordCount(filepath): 
    for file in filepath: 
     name = file 
     fileO = open(file, 'r') 
     sentences = 0 
     words = 0 
     for line in fileO: 
      sentences += line.count('.') + line.count('!') + line.count('?') 

      tempwords = line.split() 
      words += len(tempwords) 

     outputO = open(output, "a") 
     outputO.write("Name: " + name + "\n" + "Words: " + str(words) + "\n") 

wordCount(filepath) 
+0

ご協力いただきありがとうございます! – user1074057

+0

@ user1074057:また、入力行ごとに出力ファイルを1回開いていました。上記のコードは入力ファイルごとに1回開きますが、これはまだ大いに非効率的です。あなたのコードの始めにそれを一度開きます。さらに、「文章」を数えますが、結果を書いてはいけません。 –

0

はあなたのインデント間違っていないですか?つまり、最後の行は一行に一度と呼ばれますが、実際には一度はファイルあたりです。

は(他に、識別子として「ファイル」を回避しようとする - それはPythonのタイプである)