2016-02-26 71 views
-3

我需要帮助编写一个Python脚本来解析这个特定的GO注释文件,并且只输出描述生物过程(P)的行。示例输出将如图所示。 这是我迄今为止..需要一些帮助来编写一个Python脚本

    import sys 
       import re 
       file_object = open(sys.argv[[1]]) 
       for some_line in file_object: 
       some_line = some_line.strip('\n') 
        list = some_line.split("\t") 
         if re.search('>', some_line): 
          sys.stdout.write(list[1]+ "\t")

我想格式化该文件http://downloads.yeastgenome.org/curation/literature/go_slim_mapping.tab使输出仅描述一个生物过程(P)的线。

+4

“我需要帮助” < - 够公平,问题是什么? – timgeb

+1

示例输入和输出将帮助 – varesa

+0

图像?我需要眼镜吗? – zondo

回答

0

正则表达式只是查看第四个值(格式为Value-Spaces-Value-Spaces-Value-Spaces ...),然后检查它是否为'P'。如果匹配则打印线

import sys 
import re 
regex = re.compile(r'(\S+\s+){2,3}P\s.*') 
with open(sys.argv[1]) as file: 
    for line in file: 
     line = line.strip() #Consider striping the line if it's necessary 
     if regex.search(line): 
      print(line) 
+0

当我尝试使用此脚本时出现此错误:Traceback(最近一次调用最后一次):文件“parseG0”,第5行,在 中以open(sys.argv [[1]])作为文件: TypeError:列表索引必须是整数,而不是列表 – etet112

+0

对不起,与'open(sys.argv [1])一致'作为文件:'有双括号,我纠正了它,现在应该工作 –

+1

注意:一些输入行即样本的第23,26行)在第二列中没有值。你的正则表达式会把'\ t \ t'当作空格的单独运行并拒绝这些行(应该包含这些行)。也许你应该使用'\ s'而不是'\ s +'? –

0

这不一样@ MRE的答案,但没有使用re

该文件是制表符分隔,所以我们可以这样做:

with open(sys.argv[1]) as inf: 
    for line in inf: 
     parts = line.split('\t', 4) 
     if len(parts) >= 4 and parts[3] == 'P': 
      print(line, end='')