搜索GTF文件(textwraper文件)

时间:2014-05-14 15:32:37

标签: python full-text-search

我有一个包含RNA测序数据的GTF文件,在Shell中打开时看起来像这样:

1   Cufflinks   exon    12320750    12320851    .   +   .   gene_id "XLOC_000102"; transcript_id "TCONS_00014924"; exon_number "5"; gene_name "VPS13D"; oId "CUFF.308.3"; nearest_ref "ENST00000358136"; class_code "j"; tss_id "TSS819"; type "pc";
1   Cufflinks   exon    12321005    12321206    .   +   .   gene_id "XLOC_000102"; transcript_id "TCONS_00014924"; exon_number "6"; gene_name "VPS13D"; oId "CUFF.308.3"; nearest_ref "ENST00000358136"; class_code "j"; tss_id "TSS819"; type "pc";
1   Cufflinks   exon    12321958    12322137    .   +   .   gene_id "XLOC_000102"; transcript_id "TCONS_00014924"; exon_number "7"; gene_name "VPS13D"; oId "CUFF.308.3"; nearest_ref "ENST00000358136"; class_code "j"; tss_id "TSS819"; type "pc";

我需要编写代码,当用户输入gene_id时,它会返回包含此gene_id的所有行。

我写了这段代码:

def transcript_search(search_parameter):
for line in file:
   if search_parameter in line:
        return line
   else:
       print('Invalid entry')


f = open('/Users/labadmin/Desktop/example.gtf', 'r')
file = f.read()
gene_id = input("Enter the gene_id:")
transcript_search(gene_id)

当我运行此代码时,即使我输入列表中存在的id,它也找不到它。

我还尝试使用f.split将此文件拆分为列表,但它给了我一个错误:

Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
f.split()

我是Python新手,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

def transcript_search(search_parameter,files):
   for line in files:
       if search_parameter in line:
          return line
      else:
        print('Invalid entry')


files = open('/Users/labadmin/Desktop/example.gtf', 'r')

gene_id = input("Enter the gene_id:")
transcript_search(gene_id,files)

不要使用档案。因为那是一个python关键字。您还需要将文件传递给函数。

你还确定什么时候它无效,你想打印但不返回任何东西?返回类型为None。可能是你想要的,所以我没有改变它。

仅打印一次无效:

def transcript_search(search_parameter,files):
   for line in files:
       if search_parameter in line:
          return line
   #In this way invalid will only print after it has gone through all the lines and never returned.
   print('Invalid entry')

至于储蓄:

saved_lines = []

files = open('/Users/labadmin/Desktop/example.gtf', 'r')
gene_id = input("Enter the gene_id:")
#Append to list the saved entries.
saved_lines.append(transcript_search(gene_id,files))

之后,您使用files.writelines(list)将所有列表写入一行,或将其打印到屏幕或任何您想要的内容。

这会将ur search_parameter的所有行添加到列表中并返回列表

def transcript_search(search_parameter,files):
   toreturn = []
   for line in files:
       if search_parameter in line:
          toreturn.append(line)
   if len(toreturn)>0:
       #Notice at how this returns an array of strings instead of one string.
       return toreturn
   print('Invalid entry')