题目来自生信技能树论坛
![](https://img.haomeiwen.com/i5011192/2d9d89772cf25d2b.png)
从这题开始,我决定只用python做
python很强大,熟练了可以做其他语言能做的大部分事情
import glob
import collections
mydict=collections.OrderedDict()
list_dirs=glob.glob("./*.txt")
for i in list_dirs:
for line in open (i):
array=line.strip().split("\t")
if array[0] not in mydict:
mydict[array[0]]=[array[1]] #注意array[1]外面的中括号
else:
mydict[array[0]].append(array[1]) #字典中,对一个key增加多个value的方法
for gene_name in mydict:
print("%s\t%s"%(gene_name,"\t".join(mydict[gene_name])))
部分结果如下
![](https://img.haomeiwen.com/i5011192/5d022bc13818c703.png)
总结一下知识点:
1.关于glob
这个题目一开始困扰我的问题就是文件读取的问题,因为目录下有太多文件要合并
这边提供的一个思路就是把所有待读取文件的路径存到列表中然后对列表遍历。这里所用到的就是python中glob包中的glob函数
list_dirs=glob.glob("./")
当前文件下的文件路径读取到列表中
2.一个key对应多个value,而value形成一个列表。
对第一个文件就是建立单一的键值对
注意!!!
因为我们知道后面的value会形成list,所有这里键值对的构建中value要加[]
dict[key]=[value1]
同一个key,添加新的value的方法是
dict[key].append(value2)
3.一个key,多个value,怎么打印的问题
一般我们打印字典中所有的键值对的时候,用的是
for k,v in dict.items():
print(k,v)
但这里只有一个key,所以是
for key in dict:
print("%s\t%s"%(key,"\t".join(dict[key])))
"t".join()可以把list中的value用"\t"连接起来
网友评论