2011-01-24 56 views
6

Pythonを使用してテキストファイル内の特定の要素をどのように数えるか荒い時間を割いています。私はPythonの数ヶ月ですが、私は次の機能に精通しています。Pythonを使用してテキストファイル内の行数、単語数、文字数を計算する

fname = "feed.txt" 
fname = open('feed.txt', 'r') 

num_lines = 0 
num_words = 0 
num_chars = 0 

for line in feed: 
    lines = line.split('\n') 

  • raw_input
  • オープン
  • lenの
  • 印刷
  • rsplit()

がここにこれまでに私のコードです分割しました0

この時点で、私は次に何をすべきか分かりません。最初に行を数え、各行内の単語を数え、そして各単語内の文字の数を数えるのが最も論理的な方法です。しかし、私が遭遇した問題の1つは、各機能を別々に実行するためにファイルを再オープンする必要なしに、必要な機能をすべて一度に実行しようとしていたことです。

+0

私はあなたが 'feed = open(...)'を意味すると思います。また、[wc](http://unixhelp.ed.ac.uk/CGI/man-cgi?wc)を使用しない理由もありますか? –

+0

あなたは正しいです。私はもう一度 'wc'を使用するようにもう一度お読みになります。リンクに感謝します。 –

答えて

20

このお試しください:戻るあなたのコードに

fname = "feed.txt" 

num_lines = 0 
num_words = 0 
num_chars = 0 

with open(fname, 'r') as f: 
    for line in f: 
     words = line.split() 

     num_lines += 1 
     num_words += len(words) 
     num_chars += len(line) 

を:

fname = "feed.txt" 
fname = open('feed.txt', 'r') 

これのポイントは何ですか? fnameは文字列で始まり、次にファイルオブジェクトです。最初の行に定義されている文字列を実際に使用するわけではなく、文字列またはファイルオブジェクトのいずれか1つのみに1つの変数を使用する必要があります。

for line in feed: 
    lines = line.split('\n') 

lineはファイルから1行です。 split('\n')には意味がありません。

+1

は故障を感謝します。私は、すべての行を分割するために '\ n'を追加する必要があると思ったが、line.split()は意図した通りに完了しているようだ。 –

+2

@Alex Karpowitsch: 'for line in file'のようにファイルを反復処理すると、ファイルが改行されます。 'line.split()'は、行を単語に変換します。 –

+1

'wc'の文字カウントには少なくとも改行も含まれています(そしてその文字»countは常にファイルのバイト長です(UTF-16でも)。 – Joey

3

役に立つかもしれない機能:

  • open("file").read()互いに線を分離(および空行を破棄)一度
  • 'string'.splitlines()におけるファイル全体の内容を読み取り

によりlen()とそれらの関数を使って、あなたがやっていることを達成することができます。私が好きなように

+0

ありがとう、私はそれらを使って試してみます。 –

2
fname = "feed.txt" 
feed = open(fname, 'r') 

num_lines = len(feed.splitlines()) 
num_words = 0 
num_chars = 0 

for line in lines: 
    num_words += len(line.split()) 
1

一つはこの1つであるが、単語をカウントする小さなファイル

with open(fileName,'r') as content_file: 
    content = content_file.read() 
    lineCount = len(re.split("\n",content)) 
    words = re.split("\W+",content.lower()) 

のために良いかもしれ、あなたが繰り返しを気にしない場合のことができ、2つの方法がありますあなたは、各単語のカウントをしたい場合は、単に

words_count = len(words) 

を行うあなただけの

import collections 
words_count = collections.Counter(words) #Count the occurrence of each word 
を行うことができます
関連する問題