2012-02-10 9 views
13

約150のテキストファイルに文字情報が入っています。各ファイルには2つのユニークな単語()アルファとブラボーが含まれており、これらのユニークな単語の間にテキストを抽出し、別のファイルに書きたいと思います。大きなテキストファイル内の2つのユニークワード間で情報を抽出する方法

手作業では2つの単語に対してCTRL + Fキーを押しながらテキストをコピーすることができます。私は多くのファイルに対してプログラム(好ましくはPython)を使ってこれを行う方法を知りたいだけです。

答えて

27

これにはregular expressionsを使用できます。今すぐファイルを読み込み、regular expressionsを適用するよりも、するopenを使用して

>>> st = "alpha here is my text bravo" 
>>> import re 
>>> re.findall(r'alpha(.*?)bravo',st) 
[' here is my text '] 

マイtest.txtというファイル

alpha here is my line 
yipee 
bravo 

>>> f = open('test.txt','r') 
>>> data = f.read() 
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL) 
>>> x 
[' here is my line\nyipee\n'] 
>>> "".join(x).replace('\n',' ') 
' here is my line yipee ' 
>>> 
+1

+1:正規表現が優れています。 – jathanism

+0

-1(1)xは定義されていません(2)input outputモジュール?? –

+0

@ JohnMachin: 'x'を修正しました。 – RanRag

2

正規表現を使用する代わりに、Python string.findメソッドを使用してください。

>>>> unique_word_a = 'alpha' 
>>>> unique_word_b = 'bravo' 
>>>> s = 'blah blah alpha i am a good boy bravo blah blah' 
>>>> your_string = s[s.find(unique_word_a)+len(unique_word_a):s.find(unique_word_b)].strip() 
i am a good boy 
+1

一意の単語aと一意の単語bの複数の出現がある場合、私はどのような変更を行いますか?一意の単語aと一意の単語bの5番目の出現の間で検索する索引を作成しますか? – Amistad

9
a = 'alpha' 
b = 'bravo' 
text = 'from alpha all the way to bravo and beyond.' 

text.split(a)[-1].split(b)[0] 
# ' all the way to ' 
+3

1のカウントを追加することで分割することができますので、分割する追加のインスタンスを探すのをやめます: 'text.split(a、1)' – PaulMcG

6

str.findとその兄弟rfindstartend引数を持っています。

alpha = 'qawsed' 
bravo = 'azsxdc' 
startpos = text.find(alpha) + len(alpha) 
endpos = text.find(bravo, startpos) 
do_something_with(text[startpos:endpos] 

含まれているテキストが短く、正面に近い場合、これが最も速い方法です。

含まれるテキストが比較的大きく、使用の場合:

startpos = text.find(alpha) + len(alpha) 
endpos = text.rfind(bravo) 

含まれるテキストが短く、端部近傍に、使用している場合:

endpos = text.rfind(bravo) 
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha) 

第1の方法はどのような場合に比べて優れていますテキストの最初から2番目の検索を開始する素朴な方法。含まれているテキストに支配的なパターンがない場合に使用してください。

関連する問題