美文网首页
python学习:同一GeneID对应GO号排一行

python学习:同一GeneID对应GO号排一行

作者: 小明在做游戏 | 来源:发表于2021-12-02 14:48 被阅读0次

将GeneID与GO号一一对应的两列表格,转换为同一GeneID对应GO号排一行(如图),主要使用字典、列表完成转换。


INPUT.png
OUTPUT.png

代码如下

## 先定义一个函数,以空格分割字符串(用来分割ID和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()

## 新建一个空字典
dic_id_GO = {}

## 写一个循环,将ID作为键,GO作为键值;一个ID对应多个GO,所以把键值新建为一个列表
### 写一个判断,如果正在执行的ID与前一行相同,就把GO加到前一个的列表;如果与前一行不同,新建列表(第一行自动新建)
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])

## 新建一个输出文件,可写权限
fo = open('/Users/lichuanshun/Desktop/OUTPUT.txt', 'w')

## 写两个循环:第一个是遍历上述字典,写入字典的键(geneID)
##           第二个是遍历每个键对应的键值(列表),写入输出文件
##           写一个判断,如果是列表中最后一个值,就换行;不是就空格继续写
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()

相关文章

网友评论

      本文标题:python学习:同一GeneID对应GO号排一行

      本文链接:https://www.haomeiwen.com/subject/etwyxrtx.html