我是一名生物学家,并且制作了一些脚本来帮助我处理大量文件。最近我开发了一个,我遇到了麻烦。这是一个解析我所拥有的文件的脚本,用于制作xls工作表。问题是,当我使用OO方法时,该程序将无法工作。这是:
from linecache import getline
class Parser:
def __init__(self , pth='' , prot=''):
self.pth = pth
self.failed = ''
self.prot_name = prot
def sumParser(self , f):
l_info = getline(f , 6)
l_info = l_info.replace(':' , '')
l_info = l_info.replace('plot' , '')
l_info = l_info.replace('+' , '')
l_info = l_info.replace('core' , '')
l_info = l_info.replace('allow' , '')
l_info = l_info.replace('gener' , '')
l_info = l_info.replace('disall' , '')
l_info = l_info.replace('*' , '')
l_info = l_info.replace('Ramachandran' , '')
l_info = l_info.replace('|' , '')
l_info = l_info.replace('%' , '')
l_info= " ".join(l_info.split())
l_info = l_info.replace(' ', ';')
return l_info
def setProt(self, prot):
self.prot_name = prot
def setPth(self , pth):
self.pth = pth
def Open(self):
self.f = open(self.pth)
self.f2 = open('presheet.prst' , 'w')
def Parser(self):
for line in self.f:
model_name = line[0:line.find('.p')]
L = " ".join(line.split())
L = L.replace(' ', ';')
self.f2.write(L+';')
L = self.sumParser(model_name+'.sum') + '\n'
self.f2.write(L)
def Close(self):
self.__f.close()
self.__f2.close()
文件的输入是:一个文件,.sum,(第6行是我想要的信息的位置),另一个是'pdop.pdop',它采用以下格式:
GH4p.B9990001.pdb -134134 -111111 1.00000
GH4p.B9990002.pdb -134134 -111111 1.00000
GH4p.B9990003.pdb -134134 -111111 1.00000
GH4p.B9990004.pdb -134134 -111111 1.00000
GH4p.B9990005.pdb -134134 -111111 1.00000
除了在实际文件上有100个条目。 我想要的(并且能够没有OO)是将两个文件合并为一个(使用';'加入单词),让我把它全部放在xls表上。剩下的工作就完成了。 我可以使用脚本解析它,不使用OO,但是当我将所有内容放入类中时它就不会工作了!我不知道我能做什么,我读了这个代码超过30次,并且看不到解决方案(也许是因为大学的测试)。
编辑:抱歉不太清楚! OO代表面向对象,这意味着我正在使用类来完成这项工作,但不确定我是否做得对,是自己学习的。它不输出任何异常,它只是不能正常工作!!
运行它的代码很简单,有3行:
parser = Parser('pdop.pdop')
parser.Open()
parser.Parse('GH4p')
就是这样。我打算将它添加到更复杂的程序中,但是如果它不起作用就不会这样做,对吧?
另一个信息......预期的输出:
GH4p.B99900001.pdb;123123123;123123123;123123123;1.000;91;4;4;1(example!)