美文网首页生物信息学与算法
生信编程实战第12题(python)

生信编程实战第12题(python)

作者: 天秤座的机器狗 | 来源:发表于2018-08-26 20:09 被阅读26次

题目来自生信技能树论坛

image.png image.png

其实编程的题目最终要的是要搞清楚要做什么
先看看json文件是什么样的

less -S modencodeMetaData.json

image.png

根据题目的要求,就是json文件中红线框出来的这类给整理一下,整理成题目中的样子。
我的想法就是:
逐行读取
利用python中的正则表达式去匹配这些我们想整理的部分,构建键值对,最后打印出来

这里正则表达式中的pattern是

"\s+\"(.+)\"\s:\s\"(.+)\","

这个意思就是:
一个或多个空格+"+一个或多个除换行符之外的任意字符+"+一个空格+:+一个空格+"+一个或多个除换行符之外的任意字符+"+,
这样我只需要将每个line右边的空格换行符去掉,然后对每行去匹配这个pattern
就能得到需要整理的行
给出代码

import sys
import re
args=sys.argv
filename=args[1]
aDict={}
with open (filename) as fh :
   pattern = re.compile("\s+\"(.+)\"\s:\s\"(.+)\",")
   for line in fh:
     line=line.rstrip()
     mth=pattern.search(line)
     if mth:           #如果匹配上,mth就不是空
        a = mth.group(1)  #取出第一个括号里的内容
        b = mth.group(2)  #取出第二个括号里的内容
        if a not in aDict:
           aDict[a]=[b]
        else:
           aDict[a].append(b)
for k,v in aDict.items():
    z='\t'.join(v)            #因为v是列表,这一步就是把列表转换成字符串,方便查看
    print(k,z,sep="\t")

这里想提醒自己一点:
字典中想构建一个key对应多个value

if a not in aDict:
           aDict[a]=[b]
else:
           aDict[a].append(b)

这种应该很容易想到
还有列表转字符串的方法不要忘记
"".join(list)

最后看一下结果吧

python3 exc.py modencodeMetaData.json |less -S
image.png

导入excel看看

image.png

以上,12道题目全部做完了,接下来我会用R再做一遍,加强一下R的学习

相关文章

  • 生信编程实战第12题(python)

    题目来自生信技能树论坛 其实编程的题目最终要的是要搞清楚要做什么先看看json文件是什么样的 根据题目的要求,就是...

  • 生信编程实战第6题(python)

    题目来自生信技能树论坛 下载好的文件大概格式如下 简单的了解一下都有什么 A开头的 B开头的 C开头的(这一行是p...

  • 生信编程实战第4题(python)

    题目来自生信技能树论坛 从这题开始,我决定只用python做python很强大,熟练了可以做其他语言能做的大部分事...

  • 生信编程实战第1题(python)

    题目来自生信技能树统计人类外显子长度坐标的文件可如下下载: 打开文件如下 于是写了如下脚本 然后运行 正则表达式再...

  • 生信编程实战第11题(python)

    题目来自生信技能树论坛 题目不难,先给出代码 这里主要说几个问题: python中写入文件可以用的模式如下:f=o...

  • 生信编程实战第9题(python)

    题目来自生信技能树论坛 这个题目不难,但是我想说明的是大的数据集和小的数据集的脚本很多时候是不一样的 比如这道题,...

  • 生信编程实战第10题(python)

    题目来自生信技能树论坛 先下载tss文件 然后针对这些位点操作 脚本如下: 根据不同的情景,对倒数第二行的if条件...

  • 生信编程实战第8题(python)

    题目来自生信技能树论坛 这道题很简单,但是应该更重要的是学会用R的方法,我后面会用R把这个系列的题目重做一遍,这里...

  • 生信编程实战第5题(python)

    题目来自生信技能树论坛 先从hg38的gtf中提取"ANXA1"基因 在题目之前先分析要处理的数据的结构是什么样的...

  • 生信编程实战第3题(python)

    题目来自生信技能树论坛 做题之前我们先看看文件的内容是什么 gtf有9列1.染色体名 2.注释信息的来源,比如”G...

网友评论

    本文标题:生信编程实战第12题(python)

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