Python:文件读写小脚本的问题

时间:2013-09-12 17:12:46

标签: python python-2.7 file-io

我是一名生物学家,并且制作了一些脚本来帮助我处理大量文件。最近我开发了一个,我遇到了麻烦。这是一个解析我所拥有的文件的脚本,用于制作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!)

0 个答案:

没有答案