Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索GTF文件(textwraper文件)_Python_Full Text Search - Fatal编程技术网

Python 搜索GTF文件(textwraper文件)

Python 搜索GTF文件(textwraper文件),python,full-text-search,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

我有一个包含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()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
f、 拆分()
我是Python新手,非常感谢您的帮助

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))
之后,您可以使用
文件将所有列表写入一行。writelines(list)
或将它们打印到屏幕或任何您想要的内容

这会将带有ur search_参数的所有行添加到列表中,并返回列表

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')

如果有帮助,请接受答案:)我有一些后续问题,如果我使用print(“Invalid entry”),它会为未找到输入的每一行打印无效输入,但如果在整个文件中未找到输入,我希望只打印一次。你知道我怎么做吗?另一个问题是如何访问这个函数返回的行?我想把它们打印出来或保存在另一个文件中。亲爱的Moe,现在我有另一个问题。在我的文件中,每个gene_id对应不止一行,但是这段代码只返回它遇到的第一行。我再次请求帮助:)那么你想返回所有具有特定基因id的代码行吗?更新。非常感谢您的帮助!我很感激!