<p>我刚刚开始学习AWK,所以我不能在这方面提供任何建议。但是,对于某些执行所需操作的python代码:</p>
<pre><code>class ProteinIterator():
def __init__(self, file):
self.file = open(file, 'r')
self.first_line = self.file.readline()
def __iter__(self):
return self
def __next__(self):
"returns the next protein build"
if not self.first_line: # reached end of file
raise StopIteration
file = self.file
protein_data = [self.first_line]
while True:
line = file.readline()
if line.startswith('buildProtein ') or not line:
self.first_line = line
break
protein_data.append(line)
return Protein(protein_data)
class Protein():
def __init__(self, data):
self._data = data
for line in data:
if line.startswith('buildProtein '):
self.initial_compounds = tuple(line[13:].split())
elif line.startswith('Final result - '):
pieces = line[15:].split()[::2] # every other piece is a name
self.final_compounds = tuple([p[:-1] for p in pieces])
elif line.startswith('Other Compounds '):
pieces = line[16:].split()[::2] # every other piece is a name
self.other_compounds = tuple([p[:-1] for p in pieces])
def __repr__(self):
return ("Protein(%s)"% self._data[0])
@property
def data(self):
return ''.join(self._data)
</code></pre>
<p>我们这里有一个buildprotein文本文件的迭代器,它一次返回一个蛋白质作为<code>Protein</code>对象。这个<code>Protein</code>对象足够智能,可以知道它的输入、最终结果和其他结果。如果文件中的实际文本与问题中显示的不完全相同,则可能需要修改一些代码。下面是一个简短的代码测试和示例用法:</p>
^{pr2}$
<p>我没有费心去保存值,但是如果你愿意,你可以把它加进去。希望这能让你振作起来。在</p>