2017-10-30 16 views
1

からキーと値のペアを数える:[stringFq]Pythonの - 私は、次のテキストファイル持つテキストファイル

:[DOCID]の各キーのペアは、各文字列が文書に表示された回数である

abstract 233:1 253:1 329:2 1087:2 1272:1 
game 64:1 99:1 206:1 595:1 
direct 50:1 69:1 1100:1 1765:1 2147:1 3160:1 

をこのテキストファイルのキーペアの数はどのように計算できますか?

+3

私はあなたのコンピュータをオフにし、紙と鉛筆を得ることをお勧めします。言葉で**を記述する**あなたが手でこの問題を解決する方法。 Python構文については心配しないでください。ソリューションに必要な手順を記述するだけです。 –

答えて

1

正規表現のアプローチは問題ありません。ここでは反復的なアプローチがあります。 printステートメントのコメントを外すと、結果が表示されます。詳細

%%file foo.txt 
abstract 233:1 253:1 329:2 1087:2 1272:1 
game 64:1 99:1 206:1 595:1 
direct 50:1 69:1 1100:1 1765:1 2147:1 3160:1 

コード

import itertools as it 


with open("foo.txt") as f:         
    lines = f.readlines() 
    #print(lines) 
    pred = lambda x: x.isalpha()       

    count = 0            
    for line in lines: 
     line = line.strip("\n") 
     line = "".join(it.dropwhile(pred, line)) 
     pairs = line.strip().split(" ") 
     #print(pairs) 
     count += len(pairs) 

count 
# 15 

を考えると

我々はを初めて使用10ステートメントは、ファイルを安全に開いたり閉じるためのイディオムです。次に、ファイルをreadlines()を介して行に分割します。後で使用する条件付き関数(または述語)を定義します。ラムダ式は、便宜上使用し、以下の機能と同等です:

def pred(x): 
    return x.isaplha() 

我々はcount変数を初期化し、それぞれの行を反復処理を開始します。 dropwhileにラインを供給する前に、すべての行が改行文字\nを有することができるので、我々は最初のstrip()それらを離れて。

dropwhileは特別itertoolsイテレータです。行を反復するので、述語に合致する先頭の文字は、述語に失敗した最初の文字に達するまで破棄されます。言い換えれば、開始時のすべての文字は、最初の非文字が見つかるまで(スペースであることがあります)削除されます。先頭行のスペースを取り除き、残りの文字列はsplit()で、リストはpairsです。

最後の対の各行の長さが漸増countに添加されます。最終的なカウントは、すべての長さの合計であるpairsです。

概要

上記のコードは、単純な、反復ステップで扱う基本的なファイルに取り組む方法を示しています。

  • がそれぞれを反復しながら、ファイル
  • がライン
  • にファイルを分割開きますライン、クリーンでプロセスデータ
  • 出力結果
+0

ありがとうございました!私はPythonに新しいので、これは非常に形成的です! – kieron

+0

問題ありません。これはこれを行う多くの方法の1つです。 – pylang

0
import re 


file = open('input.txt', 'r') 
file = file.read() 
numbers = re.findall(r"[-+]?\d*\.\d+|\d+", file) 
#finds all ints from text file 
numLen = len(numbers)/2 
#counts all ints, when I needed to count pairs, so I just divided it by 2 

print(numLen) 
+0

答えに説明を追加する必要があります。コードだけでなくコードと説明の問題に対処する –

+0

コードにいくつかのコメントを追加しました – kieron

+0

正規表現はこれを行う最適な方法ではありません。スペース文字の文字列分割を使用して、より簡単に、より簡単にこれを実現することができます。分割文字列の最初の項目が常に単語であると仮定して、「1」を減算します。 – Jules

関連する問題