テキストファイルからデータを取得しようとしています。テキスト ファイル内の対象の行は、「マーカー 2」と「マーカー 3」の最後のインスタンスまで一致する行です。複数のマーカー (重複) が存在する可能性があります。「マーカー 2」の最小行数と「マーカー 3」の最大行数 - その最小/最大内のすべてのテキストが必要でした。これは機能しますが、これをpythonicの方法で、より効率的で少ないコードで行う方法を知りたいです。
同じファイルを 2 回開く必要があったのはなぜですか? そうでなければ、xreadlinesとreadlinesが競合していましたか?
file_seeklines.py
import sys
filename = sys.argv[1]
line_number = []
number = 0
## Fetch the boundary(start, end points)
f = open(filename,'r')
for line in f.xreadlines():
number += 1
if "marker 2" in line.strip().lower():
line_number.append(number)
if "marker 3" in line.strip().lower():
line_number.append(number)
#print line_number[0], line_number[-1]
start, end = line_number[0]-1, line_number[-1]
f.close()
## Grab the boundary
g = open(filename,'r')
linelist = g.readlines()
try:
for i in xrange(start, end):
print linelist[i]
except:
print "failed"
pass
g.close()
file.txt
Welcome notice
------------------------
Hello there, welcome! Foo
Marker 0
hello
world
Bar
Yes!
Foo
How are ya?!
Bar
Have a great day!
Marker 1
Hello 1 2
12
MarKer 2
Hello 23
23
Marker 3
Hello 34
34
marker 2
Hello 45
45
MArker 3
出力
MarKer 2
Hello 23
23
Marker 3
Hello 34
34
marker 2
Hello 45
45
MArker 3