Python:文件读写问题小纸条

2024-06-16 17:47:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个生物学家,一直在写一些脚本来帮助我处理很多文件。最近我开发了一个,我有麻烦。这是一个脚本来解析一些文件,我有,使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()

文件的输入是:一个文件,The.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!)

Tags: 文件nameselfinfo脚本deflinereplace