2012-02-10 23 views
13

मैं लगभग 150 पाठ चरित्र जानकारी से भरा फ़ाइलें में दो अनूठे शब्दों के बीच जानकारी निकालने के लिए कैसे। प्रत्येक फ़ाइल में दो अद्वितीय शब्द होते हैं() अल्फा और ब्रावो और मैं इन अद्वितीय शब्दों के बीच पाठ निकालना चाहता हूं और इसे एक अलग फ़ाइल में लिखना चाहता हूं।एक बड़े पाठ फ़ाइल

मैन्युअल मैं दो शब्दों के लिए CTRL + F और के बीच पाठ की प्रतिलिपि, मैं सिर्फ इतना पता है कि कितने फ़ाइलों के लिए एक कार्यक्रम (अधिमानतः पायथन) का उपयोग कर ऐसा करना चाहते हैं कर सकते हैं।

उत्तर

27

आप उस के लिए regular expressions उपयोग कर सकते हैं।

>>> 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 

अब open का उपयोग कर फ़ाइल को पढ़ने और regular expressions लागू करने से है।

>>> 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) एक्स परिभाषित नहीं किया गया है (2) इनपुट आउटपुट मॉड्यूल ?? –

+0

@ जॉन माचिन: ​​'x' चीज़ को ठीक किया गया। – RanRag

2
बजाय नियमित अभिव्यक्ति का उपयोग करने का

अजगर 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

क्या परिवर्तन मुझे क्या करना b.How मैं अनूठा शब्द एक की 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 (एक, 1)' – PaulMcG

6

str.find और उसके भाई rfindstart और end आर्ग की है।

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) 

पहली विधि की तुलना में बेहतर किसी भी मामले में है पाठ की शुरुआत से दूसरी खोज शुरू करने की मूर्ख विधि; इसका उपयोग करें यदि आपके निहित पाठ का कोई प्रभावशाली पैटर्न नहीं है।

संबंधित मुद्दे