我有一個大約100000行的大文本文件,我想閱讀。我對所有內容都不感興趣。我想搜索以「Residue XXX」 開頭的行,然後閱讀下面的三行。 我不想讀取緩衝區中的列表中的整個行。是否有搜索該行並從那裏如何在文件中搜索並從python中讀取行
f=open("result.txt",r)
lines = f.readlines()// NOT preferred
我只是想一些投入閱讀,如果有一種方法來搜索該行整個文件,而不是讀他們和迭代的有效途徑。
我有一個大約100000行的大文本文件,我想閱讀。我對所有內容都不感興趣。我想搜索以「Residue XXX」 開頭的行,然後閱讀下面的三行。 我不想讀取緩衝區中的列表中的整個行。是否有搜索該行並從那裏如何在文件中搜索並從python中讀取行
f=open("result.txt",r)
lines = f.readlines()// NOT preferred
我只是想一些投入閱讀,如果有一種方法來搜索該行整個文件,而不是讀他們和迭代的有效途徑。
with open("result.txt") as f:
# find line starting with Residue XXX
next(line for line in f if not line.startswith("Residue XXX"))
# get next three lines into a list (empty string for nonexistent lines)
results = [next(f, "").rstrip() for line in range(3)]
如果你想保持Residue XXX
線爲results
列表的第一個項目:
with open("result.txt") as f:
# find line starting with Residue XXX
results = [next(line for line in f if not line.startswith("Residue XXX").rstrip()]
# add next three lines to the list (empty string for nonexistent lines)
results.extend(next(f, "").rstrip() for line in range(3))
你正在尋找的東西,如:
read_lines = None
for l in open("result.txt"):
if read_lines:
print l.encode('unicode_escape')
read_lines -= 1
if read_lines == 0:
break
if l.startswith('Residue ddG RotamerProbability'):
read_lines = 3
有subtlier解決方案,但這是簡單明瞭。
文件對象是一個迭代器,如果你在不同的地方使用它,它將繼續下去。 islice是從迭代器獲取項目的方便函數。把它放在一起,使用for循環找到起始位置,然後休息。
我不確定你是想在你的列表中包含匹配的行還是想要在行結束中做什麼,所以我決定添加匹配的行加上接下來的3行,沒有拖尾行。
from itertools import islice
with open('result.txt') as f:
for line in f:
if line.startswith("Residue XXX"):
my_list = [line.strip()]
my_list.extend(extra.strip() for extra in islice(f, 3))
break
除了通過讀取數據以外,沒有任何方法可以在文件中搜索。有更多或更少的有效方法來讀取數據,所以例如用C語言來做它可能比Python中的循環更快,但是大概Python就是你想要使用的。
的itertools
模塊提供了兩個與你想要的功能:dropwhile
搜索具有特定屬性的值,並islice
選擇從一個迭代值的範圍:
import itertools
with open('result.txt') as infile:
def predicate(line):
return not line.startswith('Residue XXX')
result = list(itertools.islice(itertools.dropwhile(predicate, infile), 1, 4))
print result
那麼你嘗試過什麼? – Joe
好吧,我想要一些輸入來嘗試.. –
你當然可以運行'grep -A 3'^ Residue XXX'result.txt'並使用該命令的輸出。 – pobrelkey