为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Python

题目来自生信技能树论坛

webp

image.png


webp

image.png

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

less -S modencodeMetaData.json

webp

image.png

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

这里正则表达式中的pattern是

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

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

import sysimport 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

webp

image.png

导入excel看看

webp

image.png



作者:天秤座的机器狗
链接:https://www.jianshu.com/p/8f66b86f7e32


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消