私は生物学者であり、多くのファイルを処理するのに役立ついくつかのスクリプトを作成しています。最近私はそれを開発しましたが、問題があります。私が持っているいくつかのファイルを解析して、xls シートを作成するスクリプトです。問題は、オブジェクト指向アプローチを使用すると、プログラムが機能しないことです。ここにあります:
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()
ファイルへの入力は次のとおりです: 1 つのファイル、.sum (必要な情報が 6 行目にある) と、次の形式の 'pdop.pdop' であるもう 1 つのファイル:
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なしで可能だった)、両方のファイルを1つにマージして(「;」を使用して単語を結合する)、すべてをxlsシートに配置することです。残りは完了し、機能しています。オブジェクト指向を使用せずにスクリプトで解析できますが、すべてをクラスに入れるとうまくいきません! このコードを 30 回以上読みましたが、解決策がわかりません (大学のテストのせいかもしれません)。
編集: わかりにくすぎてすみません!
OO は Object Oriented の略で、クラスを使用して仕事をしていることを意味しますが、それが正しいかどうかはわかりません。すべて自分で学びました。
例外は出力されません。正しく動作しません!!
これを実行するコードは単純で、次の 3 行です。
parser = Parser('pdop.pdop')
parser.Open()
parser.Parse('GH4p')
これです。より複雑なプログラムに追加するつもりでしたが、機能しない場合は追加しませんよね?
別の情報...予想される出力:
GH4p.B99900001.pdb;123123123;123123123;123123123;1.000;91;4;4;1(example!)