2017-04-06 17 views
0

.pdfからスクレイプされたテキストを処理するためにPythonを使用しようとしています。Python - テキスト処理

これを行う方法の1つは、特定のアイテムを見つけて、同じ行、前の行または後続の行のいずれかを印刷することです。

私はこの点まで私を得たいくつかのチュートリアルを見て回ってきましたが、私は前進する方法を理解することができません。

以下のコードは、 "find"関数を使って現在の行から情報を見つけて印刷しますが、それを使って前後の行も印刷する必要があります。

廃棄されたテキストは次のようになります。

・スミス、ジョン・

パー終了12/12/12

ファイル:

私が使用しているコードは次のとおりです:

def main(): 
    file = open("Register.txt","r") 
    lines = file.readlines() 
    file.close 
    for line in lines: 
     line = line.strip() 
     countPerEnd = 0 
     countFile = 0 
     if line.find("Per End")!=-1: 
      countPerEnd = countPerEnd + 1 
     if line.find("File:")!=-1: 
      countFile = countFile + 1 
    print ("Per End: ", countPerEnd) 
    print ("File: ", countFile) 
main() 

私は見つけた行だけを印刷することができますが、この場合は「file:」の後の名前と番号のような他の項目を細かくする必要があります。

"Per End"と "file:"という文字列以外の文字列でもかまいませんので、常に同じになります。

結果がどこに出力されたかを確認するために結果を印刷しました。

出力は次のようになります。エンドパー :12/12/12

と「エンドパー」発見に基づいて、私は必要な出力: ・スミス、ジョン・

+0

ご質問は明確ではありません....あなたが投稿したテキストは、入力されたか、何を実行した後にあなたが得ますあなたが作成した関数ですか?あなたは何をしたいですか?このテキストから 'Smith、John'、' 12/12/12'と '12345'の値を抽出しますか? –

+0

私は希望の結果が何であるかを加えました。私はそれがカップルのものをクリアすることを願っています。 –

答えて

0

は、私は100%わからないんだけどあなたが何をしようとしているが、私は、これは右のトラックにあなたを取得すべきだと思う:

lines = open("register.txt", "r").readlines() 

search_counters = { 
    "Per End": 0, 
    "File:": 0, 
} 

lines = [line for line in lines if line] # removes empty lines, if there are any 
for i, line in enumerate(lines): 
    for search_key in search_counters.keys(): 
     if search_key in line: 
      search_counters[search_key] += 1 
      # print the previous line if the current line contains "Per End": 
      if search_key == "Per End": 
       print "previous line:", lines[i-1] 
+0

これはうまくいきます。しかし、ポイントにのみ。いくつかのIF文を追加した後、ある変数は辞書に設定されていても "定義されていません"となり、すべてが他の項目と同じようにコード化されます。私が間違っていることを確認していない。 –