Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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如何提取从不同字符开始的行中的特定数据_Python - Fatal编程技术网

python如何提取从不同字符开始的行中的特定数据

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(

我没有得到以“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('./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()