2010-10-17 141 views
0

我需要创建带有此功能的床模块:Python的床模块

readBed(文件)-read一个BED格式文件,并从它包含的数据构建模型的基因对象的列表。

writeBed(模型=模型,FNAME =文件) - 写入基因模型对象的定列表,并将其写入到一个文件名为FNAME。

对于readBed,我在想,我以前写的readline功能,并添加代码为它的结果返回一个列表。对于writeBed,我真的很无能。这里是我的代码,请指导我大家:

def ReadBed(file): 
    result = [] 
    line = fh.readline() 
    if not line: 
     fh.close() 
    else: 
     return result 

def writeBed(models=models, fname=file): 
    if file.ReadBed = result 
    return result in fname 

另外,我有一个Range类这样的,我想提出的TypeError和ValueError异常对我的课,但不知道如何做到这一点,每个人都可以请也帮助我。非常感谢大家:

class Range: 
    def __init__(self, start, end): 
    self.setStart(start) 
    self.setEnd(end) 
    def getStart(self): 
    return self.start 
    def setStart(self, s): 
    self.start = s 
    def getEnd(self): 
    return self.end 
    def setEnd(self, e): 
    self.end = e 
    def getLength(self): 
    return len(range(self.start, self.end)) 
    def overlaps(self, r): 
    if (r.getStart() < self.getEnd() and r.getEnd() >= self.getEnd()) or \ 
     (self.getStart() < r.getEnd() and self.getEnd() >= r.getEnd()) or \ 
     (self.getStart() >= r.getStart() and self.getEnd() <= r.getEnd()) or \ 
     (r.getStart() >= self.getStart() and r.getEnd() <= self.getEnd()): 
     return True 
    else: 
     return False 
+2

家庭作业问题(所有的问题真的),它通常是良好的,以提供对什么是当前阻止你的进度信息,以及以何种方式你已经尝试已经失败了。 – Daenyth 2010-10-17 20:54:59

+1

目前还不清楚什么“从它包含的数据构建基因模型对象列表”的意思。 BED格式文件中的数据格式是什么。这是一个只有[pickled](http://docs.python.org/library/pickle.html)信息的文件吗? – inspectorG4dget 2010-10-17 21:01:47

回答

1

在不知道数据被保存到文件格式,我只能假定它正在pickled。考虑到这样的假设,我可以给你下面的代码:

import cPickle 

def readBed(filepath): 
    with open(filepath, 'r') as f: 
     data = cPickle.load(f) 
     return data 

def writeBed(models, filepath): 
    with open(filepath, 'w') as f: 
     cPickle.dump(models, f) 
+0

我能不能帮助其他部分,来提高Error Error Insulator?谢谢 – pmt0512 2010-10-17 21:20:05

+1

我当然可以在Range中引发异常,但我只是将它们写入了DNAFeature的解决方案。您应该能够读取我在DNAFeature中编写的代码并为Range编写类似的代码。做一个尝试,我会帮你通过它。这是作业,我不想为你做 - 如果我这样做,你不会学习,你会在考试时遇到麻烦。 – inspectorG4dget 2010-10-17 21:35:19

+0

是的,实际上我正在使用DNAFeature中的代码来处理它,但是我会在完成代码后发布它。感谢督察 – pmt0512 2010-10-17 22:41:00

2

我将从Range类开始。首先,你不应该使用get/set方法,而应该使用变量。在python中获取/设置方法几乎总是不好的做法。即使你需要验证,你也可以使用属性。

如果您使用的Python 2.x中,你需要从object继承获得新的样式类。如果你使用py3k,你不需要声明它。在python

方法和函数名称应该是like_this而非likeThis(按照约定)。

做类似if bool: return True else: return False的东西总是可以简化为return bool,这样可以使您的重叠方法简单得多。如果你稍微思考一下它的逻辑,你的比较变得容易得多:对于两个范围重叠,必须在另一个范围之前开始,并且也必须在另一个范围开始之后结束。

对于您的BED功能,您是否尝试过运行它们?发生了什么?确保查看你在函数中使用的变量以及你在哪里定义它们。您还应该看看with声明,这是打开文件时常用的语句。它提供了安装和拆卸的钩子,并且制作了文件句柄,以便它们拆卸下来。尝试使用它,它也应该使逻辑更清晰一点。

class Range(object): 
    def __init__(self, start, end): 
     self.start = start 
     self.end = end 

    def __len__(self): 
     """This allows you to do len(Range object).""" 
     return self.end - self.start + 1 

    def overlaps(self, other): 
     if self.start < other.end: 
      return self.end > other.start 
     if other.start < self.end: 
      return other.end > self.start 
+0

嗨,实际上吸气剂和吸附剂是我的教授希望我包括在我们的作业中,许多专家告诉我不应该把它放在python中,但我不知道为什么我的教授。想要。无论如何,即使是像这样的getter和setter,我们是否仍然会引发错误异常?谢谢Daenyth。 – pmt0512 2010-10-17 21:07:16

+1

@ pmt0512:你的教授在现实世界中没有python的使用经验。看看使用'@ property'装饰器开始和结束位,你可以提出一个例外,但是你也想我也这样想, – Daenyth 2010-10-17 23:58:59

+0

她大多使用不同的语言来进行生物学研究,因为我的专业是生物信息学,所以我会说她没有太多的经验比较大多数编程专家.... – pmt0512 2010-10-18 00:33:21