python使用特定字符串连接行

python使用特定字符串连接行,python,string,join,Python,String,Join,我有一个来自代码的XML字符串输出。从输出中,我想连接两行,其中有一个“predicted_serotype”字符串,该字符串称为diff_字符串: 我想要的是这样的输出: <result type="MLST" value="96"> <result_data type="profile" value="43,47,49,49,41,15,3"/> <result_data type="QC_minimum_consensu

我有一个来自代码的XML字符串输出。从输出中,我想连接两行,其中有一个“predicted_serotype”字符串,该字符串称为diff_字符串:

我想要的是这样的输出:

<result type="MLST" value="96">
          <result_data type="profile" value="43,47,49,49,41,15,3"/>
          <result_data type="QC_minimum_consensus_depth" value="7"/>
          <result_data type="QC_max_percentage_non_consensus_base" value="10.0"/>
          <result_data type="QC_percentage_coverage" value="100"/>
          <result_data type="QC_minimum_consensus_depth_for_all_loci" value="7,17,27,10,25,18,22" diff:update-attr="value:7,17,27,10,24,18,22"/>
          <result_data type="QC_complete_pileup" value="TRUE"/>
          <result_data type="QC_mean_consensus_depth" value="17.67"/>
          <result_data type="QC_max_percentage_non_consensus_base_for_all_loci" value="10.0, 6.25, 3.45, 9.09, 5.88, 5.26, 5.41"/>
          <result_data type="QC_mean_consensus_depth_for_all_loci" value="17.67, 32.49, 34.09, 23.44, 35.57, 29.02, 39.08" diff:update-attr="value:17.67, 32.49, 34.09, 23.44, 34.24, 29.02, 39.08"/>
          <result_data type="QC_traffic_light" value="GREEN"/>
          <result_data diff:insert="" type="predicted_serotype" diff:add-attr="type;value" value="('Schwarzengrund (Achtman)', 168), ('Schwarzengrund (PHE)', 83), ('Blockley (Achtman)', 1), ('Uppsala (Achtman)', 1), ('Oslo (Achtman)', 1), ('Schwarzengru (Achtman)', 1), ('Iv Rough:Z4,Z32:- (Achtman)', 1)"/><result_data type="predicted_serotype" value="('Schwarzengrund (PHE)', 13)" diff:delete=""/>
    </result>
    <gastro_prelim_st reason="not novel" success="false">
          <type st="96"/>
    </gastro_prelim_st>

这就应该做到了,我们寻找一个具有预测的血清型的株系的第一次出现,然后如果我们遇到另一次出现,我们将其删除并添加到第一次出现中

diff_list = diff.split("\n")
first_serotype_line_nbr = 0

for n,line in enumerate(diff_list):
    if "predicted_serotype" in line:
        if first_serotype_line_nbr == 0:
            first_serotype_line_nbr = n
        else:
            diff_list[first_serotype_line_nbr] += line.rstrip()
            del(diff_list[n])
    else:    
        diff_list[n]=line.rstrip()

print("\n".join(diff_list))

这是我找到的最有效的方法

我尽力使代码尽可能解释清楚。。如果你愿意,你可以把它缩短

goal_str = 'predicted_serotype'
lines = text.split('\n')
line_indexes = [lines.index(elem) for elem in lines if elem.find(goal_str) > -1]
desired_text = lines[line_indexes[0]] + ''.join([lines[index].strip() for index in line_indexes[1:]])
[lines.pop(index) for index in line_indexes[1:]]
lines[line_indexes[0]] = desired_text
fixed_text = '\n'.join(lines)
print(fixed_text)
diff_list = diff.split("\n")
first_serotype_line_nbr = 0

for n,line in enumerate(diff_list):
    if "predicted_serotype" in line:
        if first_serotype_line_nbr == 0:
            first_serotype_line_nbr = n
        else:
            diff_list[first_serotype_line_nbr] += line.rstrip()
            del(diff_list[n])
    else:    
        diff_list[n]=line.rstrip()

print("\n".join(diff_list))
goal_str = 'predicted_serotype'
lines = text.split('\n')
line_indexes = [lines.index(elem) for elem in lines if elem.find(goal_str) > -1]
desired_text = lines[line_indexes[0]] + ''.join([lines[index].strip() for index in line_indexes[1:]])
[lines.pop(index) for index in line_indexes[1:]]
lines[line_indexes[0]] = desired_text
fixed_text = '\n'.join(lines)
print(fixed_text)