python學(xué)習(xí):同一GeneID對(duì)應(yīng)GO號(hào)排一行

將GeneID與GO號(hào)一一對(duì)應(yīng)的兩列表格,轉(zhuǎn)換為同一GeneID對(duì)應(yīng)GO號(hào)排一行(如圖),主要使用字典、列表完成轉(zhuǎn)換。


INPUT.png

OUTPUT.png

代碼如下

## 先定義一個(gè)函數(shù),以空格分割字符串(用來(lái)分割I(lǐng)D和GO)
def str_split(lines):
    list2 = lines.split()
    return list2

## 讀入INPUT文件
f = open('/Users/lichuanshun/Desktop/INPUT.txt', 'r')
lines_2 = f.readlines()
f.close()

## 新建一個(gè)空字典
dic_id_GO = {}

## 寫(xiě)一個(gè)循環(huán),將ID作為鍵,GO作為鍵值;一個(gè)ID對(duì)應(yīng)多個(gè)GO,所以把鍵值新建為一個(gè)列表
### 寫(xiě)一個(gè)判斷,如果正在執(zhí)行的ID與前一行相同,就把GO加到前一個(gè)的列表;如果與前一行不同,新建列表(第一行自動(dòng)新建)
for i in range(len(lines_2)):
    if i == 0:
       dic_id_GO[str_split(lines_2[i])[0]] = []
       dic_id_GO[str_split(lines_2[i])[0]].append(str_split(lines_2[i])[1])
    else:
        if str_split(lines_2[i])[0] != str_split(lines_2[i-1])[0]:
            dic_id_GO[str_split(lines_2[i])[0]] = []
            dic_id_GO[str_split(lines_2[i])[0]].append(str_split(lines_2[i])[1])
        else:
            dic_id_GO[str_split(lines_2[i])[0]].append(str_split(lines_2[i])[1])

## 新建一個(gè)輸出文件,可寫(xiě)權(quán)限
fo = open('/Users/lichuanshun/Desktop/OUTPUT.txt', 'w')

## 寫(xiě)兩個(gè)循環(huán):第一個(gè)是遍歷上述字典,寫(xiě)入字典的鍵(geneID)
##           第二個(gè)是遍歷每個(gè)鍵對(duì)應(yīng)的鍵值(列表),寫(xiě)入輸出文件
##           寫(xiě)一個(gè)判斷,如果是列表中最后一個(gè)值,就換行;不是就空格繼續(xù)寫(xiě)
for j in dic_id_GO:
    fo.write( j + '\t')
    for k in range(len(dic_id_GO[j])):
        if k < max(range(len(dic_id_GO[j]))):
            fo.write( dic_id_GO[j][k] + '\t')
        else:
            fo.write( dic_id_GO[j][k] + '\n')
fo.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容