2
我有一個函數可以計算我的數據的「或者」或者「類型的列表。如何從同一個函數中的兩個循環獲取結果?
keyword = sys.argv[1] # a name from the Name column
def exon_coords():
exon_start_plus = [] # Plus strand coordinates
exon_start_minus = [] # Minus strand coordinates
for line in csv.reader(sys.stdin, csv.excel_tab):
if len(line) >= 1:
if re.search(keyword, str(line)): # If arg keyword exists in file
if line[3] == "-": # If the DNA strand is a minus strand
chrompos = line[0] + ";" # Get the chromosome position
exon_start_minus.append(chrompos+line[1]) # Full exon position
else: # all other lines are plus strands
chrompos = line[0] + ";"
exon_start_plus.append(chrompos+line[1])
return exon_start_minus, exon_start_plus #Return lists
目標是然後用座標寫出輸出文本文件。
with open(keyword+"_plus.txt", "w") as thefile:
for item in exon_start_plus:
thefile.write("{}, ".format(item))
,或者如果關鍵字產生了負鏈:
with open(keyword+"_minus.txt", "w") as thefile:
for item in exon_start_minus:
thefile.write("{}, ".format(item))
我試圖把這些寫入文件的代碼內,但隨後恢復功能只是不會給我的完整列表,我結束了每次只寫一個座標。我把它們放在最後,但是這會導致空文件和空字符串 - 我想將它作爲一個函數,並確定關鍵字(即基因ID)是否具有給定的加/減鏈的座標(我有一個巨大的數據文件包含這些數據,重點是不要手動掃描這些ID並查看它們是否爲加/減DNA鏈)。
謝謝!
EDIT(樣本數據,不得不讓我編輯的代碼,以及去除一些列):
Position Start End Strand Overhang Name
1 3798630 3798861 + . ENSPFOG0000001
1 3799259 3799404 + . ENSPFOG0000001
1 3809992 3810195 + . ENSPFOG0000001
1 3810582 3810729 + . ENSPFOG0000001
2 4084800 4084866 - . ENSPFOG0000002
2 4084466 4084566 - . ENSPFOG0000002
2 4084089 4084179 - . ENSPFOG0000002
所以,如果我用ENSPFOG0000001作爲我的關鍵字,那麼腳本應該運行,並確定股線另外,收集列表中的起始座標,然後輸出一個只有座標的文件。該文件將附加關鍵字+「_ plus.txt」。如果是ENSPFOG0000002,那麼它將收集負鏈座標,並創建一個文件,其中創建關鍵字+「_ minus.txt」。
你是說'''''exon_coords()'''不工作? – wwii
你能提供一個來自你將傳遞給'csv.reader'的輸入文件的最小樣本嗎? –
exon_coords()工作,但我的返回語句會導致一個空的列表(因爲我先設置了兩個空列表,這樣它可以將結果附加到正確的列表中),然後列出我的座標。然後,我希望腳本根據創建的列表創建適當的標題文件。 – DNAngel