【问题标题】:stripping a line with proper indent in python在python中用适当的缩进剥离一行
【发布时间】:2014-06-26 06:17:05
【问题描述】:

输入:

$target: ENSG00000097007|ABL1
length: 3075
miRNA : hsa-miR-203
length: 22

mfe: -30.5 kcal/mol
p-value: 0.606919

position:  2745
target 5'   C             G     C 3'
             GUGGUCCUGGACA   CAC    
             CACCAGGAUUUGU   GUG    
miRNA  3' GAU             AAA     5'

我必须去掉最后两行,然后为其分配两个数组并读取每个字符并获得如下所示的输出,

剥线后的格式应该是:

   CACCAGGAUUUGU   GUG    
GAU             AAA     

如果从 line1 读取行字符,则应以小写形式打印,如果从第二行读取,则应以大写形式打印

程序的最终输出应该是 "GAUcaccaggauuuguAAAgug"

我们试图读取它的代码并没有像输入中看到的那样完全对齐地剥离行

这里是我们使用的代码:

 import fileinput
 import sys
 from sys import argv
 script, filename = argv
 file = open(filename)
 og1 = "AGUUCCUUUGUUUUGGUGACUG"
 pattern = "              "
 pattern1 = "miRNA  3'"
 file = open(filename)
 for line in file:
    if line.startswith(pattern):
        n = file.next()
        # print n[9:],#  bound mirna
        for i in range(0, len(og1)):
            print og1[i],
        print "\n" 
        for j in range(0,len(n)):
            print n[j],'

问题的进一步输入

target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-125b-5p
length: 22

mfe: -23.9 kcal/mol
p-value: 0.610132

position  168
target 5' C     C               A 3'
           CGCAG   GGGGU   AGGGA    
           GUGUU   UCCCA   UCCCU    
miRNA  3' A     CAA     GAG       5'


target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-149-3p
length: 21

mfe: -36.6 kcal/mol
p-value: 0.598318

position  798
target 5' C   UGUC     AGG        G 3'
           CGC    GCCCC   CCCUCCCU    
           GUG    CGGGG   GGGAGGGA    
miRNA  3' C   U        GCA          5'


target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-185-5p
length: 22

mfe: -27.8 kcal/mol
p-value: 0.606550

position  733
target 5' C       CUCCC   CAGAUGA        C 3'
           CGGGAGC     CCU       UCUCUCCA    
           GUCCUUG     GGA       AGAGAGGU    
miRNA  3' A       AC      A                5'


target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-199a-3p
length: 22

mfe: -21.9 kcal/mol
p-value: 0.611970

position  357
target 5' C      CC   CCU      U    C 3'
           AGCCAG   GC   GGGCUG CUGU    
           UUGGUU   CG   UCUGAU GACA    
miRNA  3' A      ACA                  5'


target: ENSG00000142208|ENST00000349310|AKT1
length: 992
miRNA : hsa-miR-451a
length: 21

mfe: -21.2 kcal/mol
p-value: 0.612523

position  416
target 5' C      UCAACC       A     3'
           CUCAGU      UGGUGGC        
           GAGUCA      ACCAUUG        
miRNA  3' U      UU           CCAAA 5'

【问题讨论】:

    标签: python arrays string


    【解决方案1】:
    file = open(filename)                                          
    for segment in file.read().split("\n\ntarget"):                          
        interested_lines = segment.split('\n')[-3:-1]  #Fetch last two lines 
        split1 = interested_lines[0].split()                                 
        split2 = interested_lines[1].split()[2:-1]                           
        for i in range(0,len(split1)<len(split2)):                           
            split1.append("")                                                
    
        req = ""                                                             
        for i in range(0,len(split2)):                                       
            req += split2[i]+split1[i].lower()                               
        for j in range(i+1,len(split1)):                                     
            req += split1[j]                                                 
        print req
    

    输出

    AguguuCAAucccaGAGucccu
    CgugUcggggGCAgggaggga
    AguccuugACggaAagagaggu
    AuugguuACAcgUCUGAUGACA
    UgagucaUUaccauugCCAAA
    

    【讨论】:

    • 你能解释一下这行到底是什么意思吗 print split2[0]+split1[0].lower()+split2[1]+split1[1].lower() 我是python的新手无法获取代码
    • 我想说的是,所有人的输入都不相同。就像在其他情况下,输入完全不同。所以我需要知道如何打印,如果它从第一行读取意味着它是小写的,如果从第二行读取意味着它是大写的,并且在单个文件中的最终输出中,如上@Ashoka Lella
    • @ramko,split() 函数根据空格分割行。对于最后一行 split1 = ["CACCAGGAUUUGU","GUG"]。最后一行 split2 = ["miRNA", "3'", "GAU", "AAA", "5'"]。
    • @ramko,如果您可以粘贴输入文件的更多内容。我可以进一步概括代码
    • 已添加有问题的输入本身
    【解决方案2】:

    我会按行分割,抓住最后两行,然后遍历压缩在一起的两行并使用不是" "的字符!

    def combinebases(base_data):
        lines = base_data.splitlines()[-2:]
        output = list()
        lines[0] = lines[0].lower()
        for ch1, ch2 in zip(*lines):
            output.append(max(ch1, ch2))
        return ''.join(output[10:-4])
    

    可能更安全的结果是返回:

        return re.search("(?<=miRNA  3' )[augc]+", ''.join(output), re.I).group()
    

    但是,如果您的每个基本长度都相同,那么正则表达式就有点过头了。

    结果:

    >>> txt = """$target: ENSG00000097007|ABL1
    length: 3075
    miRNA : hsa-miR-203
    length: 22
    
    mfe: -30.5 kcal/mol
    p-value: 0.606919
    
    position:  2745
    target 5'   C             G     C 3'
                 GUGGUCCUGGACA   CAC    
                 CACCAGGAUUUGU   GUG    
    miRNA  3' GAU             AAA     5'"""
    
    >>> combinebases(txt)
    'GAUcaccaggauuuguAAAgug'
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 2017-01-20
      • 2011-03-23
      相关资源
      最近更新 更多