2010-10-17 105 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