2017-12-02 16 views
0

私はKindleからインポートしたテキストファイルからいくつかの行を削除しようとしています。テキストは次のようになります。インポートされたテキストファイル(Python)の削除

Shall I come to you? 
Nicholls David, One Day, loc. 876-876 


Dexter looked up at the window of the flat where Emma used to live. 
Nicholls David, One Day, loc. 883-884 


I want to grab the bin bag and do a forensics 
Sophie Kinsella, I've Got Your Number, loc. 64-64 

完全なファイルは長くなりますが、これは単なるドキュメントです。私のコードの目的は、 "loc"が書かれているすべての行を削除し、抽出だけが残るようにすることです。私のターゲットは、空白行の直前の行を削除することもできます。

私のコードは、これまでのようになります。

f = open('clippings_export.txt','r', encoding='utf-8') 
message = f.read() 
line=message[0:400] 
f.close() 

key=["l","o","c","."," "] 


for i in range(0,len(line)-5): 
    if line[i]==key[0]: 
     if line[i+1]==key[1]: 
      if line[i + 2]==key[2]: 
       if line[i + 3]==key[3]: 
        if line[i + 4]==key[4]: 

最後ifはそれぞれ「LOCは、」ファイルに配置され、正確に位置(インデックス)を求めます。それにもかかわらず、この段階の後、私はコードがラインが始まる場所をキャッチするように、ラインに戻る方法を知らず、完全に削除することができます。私は次に何をすることができますか?この行を削除する別の方法をお勧めしますか?

ありがとうございます!

答えて

3

私は質問が少し誤解を招くかもしれないと思います!

これらの行を削除するだけの場合は、その行に「loc」が含まれているかどうかを確認する必要があります。部分文字列。おそらく最も簡単な方法はin operatorです。

read()関数からファイル全体を取得する代わりに、ファイルを1行ずつ(例えば、readlines() functionを使用して)読み込みます。次に、キーが含まれているかどうかを確認し、キーがある場合はキーを省略することができます。

結果が文字列のリストになっているので、それをマージするとよいでしょう:str.join()

ここでは、希望の行を格納するために別のリストを使用しましたが、「もっとpythonic」filter()またはリストの理解を使用することもできます。 (つまり、キーを含む行を希望している)Here's question about the opposite - ところで

f = open('clippings_export.txt','r', encoding='utf-8') 
lines = f.readlines() 
f.close() 

filtered_lines = [] 
for line in lines: 
    if "loc." in line: 
     continue 
    else: 
     filtered_lines.append(line) 

result = "" 
result = result.join(filtered_lines) 

は、私はそれが重複するかもしれないと思いました。

+0

こんにちはエイドリアン。おそらく質問は少し誤解を招いていたかもしれませんが、あなたの答えは完璧に機能しました!私はコマンドの期限について何も知らなかった(私はread()について知っていた)。どうもありがとう! –

+0

だから誰も前に答えたことはないと私は最初の答えを得ることができた:) 私は助けることができてうれしい! – Adrian