题目来自生信技能树论坛
其实编程的题目最终要的是要搞清楚要做什么
先看看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的学习
网友评论