簡體   English   中英

在 python 中的索引緊隨特定字符串之后開始

[英]Indexing in python starting just after a specific string

我有一個制表符分隔的文件,其值如下:

12  6814296 2   192 C:0.911458  T:0.0885417
12  6814328 2   192 C:1 T:0
12  6814345 2   192 C:1 T:0
12  6814360 2   192 C:1 T:0
12  6814381 2   192 G:1 A:0
12  6814396 2   192 C:1 A:0
12  6814397 2   192 G:0.989583  A:0.0104167
12  6814464 2   192 T:1 C:0
12  6814468 2   192 C:0.927083  TCCC:0.0729167
12  6814486 2   192 C:1 T:0
12  6814551 2   192 G:1 C:0
12  6814567 2   192 A:1 G:0
12  6814589 2   192 C:0.989583  T:0.0104167
12  6814619 2   192 G:1 A:0
12  6814663 2   192 A:1 G:0
12  6814732 2   192 C:1 T:0
12  6814752 4   192 CTTT:0.979167   CTTTTT:0    CT:0.015625 C:0.00520833
12  6814786 2   192 C:1 <CN0>:0
12  6814798 2   192 C:0.984375  T:0.015625
12  6814828 2   192 C:0.989583  G:0.0104167
12  6814951 2   192 G:1 C:0

從這個文件中,我必須創建一個 csv 文件,每行有 3 個逗號分隔值。

下面是我的代碼:

file1 = open('/home/aahm/Documents/gene1.frq', 'r')
input_data = file1.readlines()
for line in input_data:
    rm_newline = line.strip('\n')
    comma_separated = rm_newline.split('\t')
    a = comma_separated[0]
    b = comma_separated[1]
    c = comma_separated[-1]
    d = c[2:]
    if comma_separated [2] == '2':
        e = a + ','+ b +',' + d
        print (e)
    elif comma_separated [2] == '3':
        f = comma_separated[-1]
        g = f[2:]
        h = comma_separated[-2]
        i = h[2:]
        if g > i:
            j = a + ','+ b +',' + g
            print (j)
        else:
            k = a + ','+ b +',' + i
            print (k)
    elif comma_separated [2] == '4':
        l = comma_separated[-1]
        m = l[2:]
        n = comma_separated[-2]
        o = n[2:]
        p = comma_separated[-3]
        q = p[2:]
        if m > o and m > p:
            r = a + ','+ b +',' + m
            print (r)
            
        elif o > m and o > p:
            s = a + ','+ b +',' + o
            print (s)
            
        elif p > m and p > o:
            t =  a + ','+ b +',' + p
            print (t)

該代碼運行良好,除了索引我使用了這些:

d = c[2:]
g = f[2:]
i = h[2:] 

等等

對於輸入文件中的第 6 列和第 7 列和第 8 列,我只需要 output 這樣的數字。 但是,我的索引為我提供了字符串以及某些行的數字,因為 ':' 前面的字符串大於 1。下面給出了一個示例

最后一列的值為 TCCC:0.0729167 表示 1 行。 當索引'd = c [2:]'用於索引時,我得到CC:0.0729167as output,而我只需要0.0729167作為output。

我堅持這一點,根本沒有任何關於如何進行的提示。 如果有任何幫助,我將不勝感激。 謝謝!

您正在從第三個字符(包括)開始對列表進行切片,在您的示例中為您提供“CC:0.0729167”。 正如其他人在評論中所說,您可以使用yourstring.split(":")[1]根據冒號的 position 拆分字符串,然后通過指定其索引來檢索它的后半部分[1]

根據其他人的評論,您需要將其拆分出來的列數據中剩余一個“:”。 但是,您在此處的代碼已經相當不透明 - 所有字母字母變量使得很難看出一段簡單的代碼實際上試圖做什么。 為了避免變得更糟,在下面的示例中,我定義了一個簡單的 function getnum,您可以提供一個字段,如果需要,它會為您進行拆分。 當然,如果字段有多個“:”字符,這將不起作用,但修改 getnum 很容易。 然后,我更改了您的代碼以通過此 getnum function 運行每個字段。

為了讓自己的生活更輕松,我鼓勵您使用比 a、b、c 等更有意義的變量名。 此外,這里有一點解釋性評論,go 會有很長的路要走——我認為有了這些,你可能已經能夠自己解決問題了!

input_data = file1.readlines()

# process a field to only use numbers after a :
def getnum(src):
    if ":" in src:
        return src.split(":")[1]
    else:
        return src

for line in input_data:
    rm_newline = line.strip('\n')
    comma_separated = rm_newline.split('\t')
    a = getnum(comma_separated[0])
    b = getnum(comma_separated[1])
    c = getnum(comma_separated[-1])
    d = c[2:]
    if comma_separated [2] == '2':
        e = a + ','+ b +',' + d
        print (e)
    elif comma_separated [2] == '3':
        f = getnum(comma_separated[-1])
        g = f[2:]
        h = getnum(comma_separated[-2])
        i = h[2:]
        if g > i:
            j = a + ','+ b +',' + g
            print (j)
        else:
            k = a + ','+ b +',' + i
            print (k)
    elif comma_separated [2] == '4':
        l = getnum(comma_separated[-1])
        m = l[2:]
        n = getnum(comma_separated[-2])
        o = n[2:]
        p = getnum(comma_separated[-3])
        q = p[2:]
        if m > o and m > p:
            r = a + ','+ b +',' + m
            print (r)
            
        elif o > m and o > p:
            s = a + ','+ b +',' + o
            print (s)
            
        elif p > m and p > o:
            t =  a + ','+ b +',' + p
            print (t)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM