我有一个包含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新手,非常感谢您的帮助。
答案 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')