python如何提取从不同字符开始的行中的特定数据
我没有得到以“PTHR”开头的值。 如果我想把输出文件分成不同的文件,而不是打印它们,我该怎么办?这里“j”是从PTHR开始的id。 请任何人都能告诉我这个脚本有什么问题吗python如何提取从不同字符开始的行中的特定数据,python,Python,我没有得到以“PTHR”开头的值。 如果我想把输出文件分成不同的文件,而不是打印它们,我该怎么办?这里“j”是从PTHR开始的id。 请任何人都能告诉我这个脚本有什么问题吗 #!/usr/bin/python import os import re path=os.getcwd() list_dir=os.listdir(path+'//Osativa') if not os.path.exists('results'): os.makedirs('results') fo1=open(
#!/usr/bin/python
import os
import re
path=os.getcwd()
list_dir=os.listdir(path+'//Osativa')
if not os.path.exists('results'):
os.makedirs('results')
fo1=open('./results/annotation.txt','w')
f1=open(path+'//CLEAN FILE.csv').readlines()
f2=open(path+'//Osativa//Osativa_323_v7.0.annotation_info.txt').readlines()
f02=open('./results/PF.txt','w')
#num=0
for line in f1:
locus_id=line.split(',')[1]
if locus_id.startswith('LOC'):
#num +=1
#print(num)
#print (locus_id)
#num1=0
for line1 in f2:
if locus_id==line1.split()[1]:
#num1+=1
#print (num1)
#print locus_id
transcript=line1.split()[2]
if transcript.startswith('LOC'):
#print (locus_id+'\t'+transcript)
for i in line1.split():
if i.startswith('PF'):
#print (locus_id+'\t'+transcript+'\t'+i)
break
else:
#print(locus_id+'\t'+transcript+'\t'+'\t')
for j in line1.split():
if j.startswith('PTHR'):
print (j)
break
else:
print ('\t')
5.2,地址:Os01g07070,Os01g0164400,osRBD2b,1,f,332177443326179,,,
5.2,地址:Os05g51480,Os05g0592400,osDBP2a,5,f,2944921029457409,,,
5.2,地址:Os07g12490,Os07g0227400,osRBD1b,7,f,71197247125463
f1 sample input:
33123472 LOC_Os01g15010 LOC_Os01g15010.1 LOC_Os01g15010.1 PF08477 PTHR11711,PTHR11711:SF203 KOG0077 K07953 GO:0007264,GO:0005525 AT4G02080.1 ASAR1,ATSAR2,ATSAR1C,SAR2分泌相关RAS超家族2
33122156 LOC_Os01g15020 LOC_Os01g15020.1 LOC_Os01g15020.1 PF00400 PTHR22847,PTHR22847:SF424 KOG0266 GO:0005515 AT3G16830.1 TPR2无顶相关2
33122157 LOC_Os01g15020 LOC_Os01g15020.2 LOC_Os01g15020.2 PF00400 PTHR22847,PTHR22847:SF424 KOG0266 GO:0005515 AT3G16830.1 TPR2无顶相关2
33121795 LOC_Os01g15029 LOC_Os01g15029.1 LOC_Os01g15029.1 5.2.1.8 AT3G66654.3亲环素样肽基脯氨酰顺反异构酶家族蛋白质
我将f1的LOC_id与f2的LOC_id匹配。然后我提取其特定数据,如PF id、PTHR id等。给定您提供的输入数据,并添加一个实际匹配的条目(f2中的最后一行),我使用了以下代码打印匹配:
f2 sample input:
运行此代码,我会将以下输出打印到屏幕上:
f1 = [
"5.2,LOC_Os01g07070,Os01g0164400,osRBD2b,1,f,3321774,3326179,,,",
"5.2,LOC_Os05g51480,Os05g0592400,osDBP2a,5,f,29449210,29457409,,,",
"5.2,LOC_Os07g12490,Os07g0227400,osRBD1b,7,f,7119724,7125463,,,",
]
f2 = [
"33123472 LOC_Os01g15010 LOC_Os01g15010.1 LOC_Os01g15010.1 PF08477 PTHR11711,PTHR11711:SF203 KOG0077 K07953 GO:0007264,GO:0005525 AT4G02080.1 ASAR1,ATSAR2,ATSARA1C,SAR2 secretion-associated RAS super family 2",
"33122156 LOC_Os01g15020 LOC_Os01g15020.1 LOC_Os01g15020.1 PF00400 PTHR22847,PTHR22847:SF424 KOG0266 GO:0005515 AT3G16830.1 TPR2 TOPLESS-related 2",
"33122157 LOC_Os01g15020 LOC_Os01g15020.2 LOC_Os01g15020.2 PF00400 PTHR22847,PTHR22847:SF424 KOG0266 GO:0005515 AT3G16830.1 TPR2 TOPLESS-related 2",
"33121795 LOC_Os01g15029 LOC_Os01g15029.1 LOC_Os01g15029.1 5.2.1.8 AT3G66654.3 Cyclophilin-like peptidyl-prolyl cis-trans isomerase family protein",
"33121795 LOC_Os07g12490 LOC_Os01g15029.1 LOC_Os01g15029.1 5.2.1.8 PTHR22847,PTHR22847:SF424 AT3G66654.3 Cyclophilin-like peptidyl-prolyl cis-trans isomerase family protein",
]
for info in f1:
locus_id = info.split(',')[1]
if not locus_id.startswith("LOC"):
continue
for detail in f2:
split_detail = detail.split()
if locus_id != split_detail[1]:
continue
if not split_detail[2].startswith("LOC"):
continue
for element in split_detail:
if element[:4].upper() == "PTHR":
print(element)
我已经重命名了脚本中的一些变量,并简化了条件,以减少嵌套循环的最大缩进并澄清代码
如果要将数据写入文件而不是打印到屏幕上,我将使用以下方法:
PTHR22847,PTHR22847:SF424
您能否提供一些示例数据,即您希望在
f1
和f2
中看到的数据?另外,您希望在print(j)
中看到什么?当然。我已经编辑了我的问题。你能再看一次吗。
# ====
# DEFINITIONS OF f1 and f2
# ====
f_out = open("output.txt", "w")
for info in f1:
locus_id = info.split(',')[1]
if not locus_id.startswith("LOC"):
continue
for detail in f2:
split_detail = detail.split()
if locus_id != split_detail[1]:
continue
if not split_detail[2].startswith("LOC"):
continue
for element in split_detail:
if element[:4].upper() == "PTHR":
f_out.write(element + "\n")
f_out.close()