2015-05-11 47 views
2

我試圖讀取象下面的行:如何將第二行連接到python的第一行結尾?

A:129 Tyr -P- 9 -   -    -    10xR,4xG,3xD,3xK,2xP,2xV,2xY,1xE,1xI,1xL,1xM,1xN,1 
                    xQ,1xT 
A:181 Ser -P- 8 -   -    -    9xR,9xS,8xG,4xT,3xD,3xL,3xQ,3xV,2xK,2xM,1xA,1xF,1x 
                    H,1xY 
A:50  His --- 9 -   -    -    17xL,9xA,4xK,3xI,3xR,3xV,2xN,2xS,1xC,1xE,1xH,1xQ,1 
                    xT 

當每個偶數行是奇數行的繼續,但其由「\ n \ S \ S \ S \ S \ S \ S \ S \分割小號\ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \小號\ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ S \ s \ s \ s \ s \ s \ s \ s \ s \ s「,所以我想將這些'\ n \ s(n)'替換爲''並加入到ODD行的末尾。

例如:

A:181 Ser -P- 8 -   -    -    9xR,9xS,8xG,4xT,3xD,3xL,3xQ,3xV,2xK,2xM,1xA,1xF,1x 
                    H,1xY 

TO

A:181 Ser -P- 8 -   -    -    9xR,9xS,8xG,4xT,3xD,3xL,3xQ,3xV,2xK,2xM,1xA,1xF,1xH,1xY 

CODE:

import os 
import sys 
import re 

lines=["A:129 Tyr -P- 9 -   -    -    10xR,4xG,3xD,3xK,2xP,2xV,2xY,1xE,1xI,1xL,1xM,1xN,1","                 xQ,1xT","A:181 Ser -P- 8 -   -    -    9xR,9xS,8xG,4xT,3xD,3xL,3xQ,3xV,2xK,2xM,1xA,1xF,1x","                 H,1xY","A:50  His --- 9 -   -    -    17xL,9xA,4xK,3xI,3xR,3xV,2xN,2xS,1xC,1xE,1xH,1xQ,1","                 xT"] 

for i in lines: 
    print i.replace("                 ","") 

在這裏,我只是空白代替空格,但我沒有得到如何加入那些將偶數行替換爲奇數行結束。

所以有人可以幫助我做同樣的事情。

感謝您提前。

嗨,大家好,首先非常感謝您的好評。我嘗試了所有的辦法,但隨後一個工作正確的:

WILD= open("INPUT.txt", 'r') 
merged = [] 
for line in WILD: 
    if line.startswith(" "): 
     merged[-1] += line.strip() 
    else: 
     merged.append(line.replace("\n","")) 

OUTPUT:

A:129 Tyr -P- 9 -   -    -    10xR,4xG,3xD,3xK,2xP,2xV,2xY,1xE,1xI,1xL,1xM,1xN,1xQ,1xT 
A:181 Ser -P- 8 -   -    -    9xR,9xS,8xG,4xT,3xD,3xL,3xQ,3xV,2xK,2xM,1xA,1xF,1xH,1xY 
A:50  His --- 9 -   -    -    17xL,9xA,4xK,3xI,3xR,3xV,2xN,2xS,1xC,1xE,1xH,1xQ,1xT 

回答

1

閱讀整個文件作爲單個串,然後使用一個標籤更換整個空白:

filepointer = open("INPUT.txt") 
text = filepointer.read() 
text = re.sub(r"\n\s{20,}", "\t", text) 

此匹配,並刪除一個新行,隨後20個或多個空間的序列,替換它們一個標籤。 (這樣我就不必計算精確的空格數量,如果某些行略有不同,程序仍然可以運行)。 如果您不想要連接線之間的選項卡,只需使用空格(" ")而不是"\t"

如果你必須有結果作爲行的列表,後來分裂text

merged = text.splitlines() 
+0

這個作品非常完美:-) – user3805057

+0

很高興聽到它!一旦你解決了你的問題,不要忘記「接受」你發現最有用的答案,通過點擊大號複選標記。你也可以把你發現有用的所有答案都投票給你:-) – alexis

2

而不是replace語句,你可以使用str.strip在開始或結束時剝去空白的字符串。另外,您可以使用zip來迭代行對。

for x, y in zip(l[::2],l[1::2]): 
    print "".join([x, y.strip()]) 

或者使用next獲得下一行,如果這是一個迭代器,像一個文件。

for x in iterator: 
    y = next(iterator) 
    print "".join([x, y.strip()]) 

兩種方式,所有的偶數行(0,2,...)去x和所有的奇數一(1,3,...),以y。 當然,這是假設全部列表/文件中的條目正好包含兩行。

如果他們可以跨越任意數量的行(只有一個,兩個或五個),那麼這會變得更加複雜。在這種情況下,你可以嘗試這樣的事:

merged = [] 
for line in lines: 
    if line.startswith(" "): 
     merged[-1] += line.strip() 
    else: 
     merged.append(line) 

注:如果放入系統確實是從一個文件中的行,你可能需要用strip所有線,即還x.strip()merged.append(line.strip()),因爲每個行將被\n終止,你可能想要擺脫它。

+0

正如一個值得注意的問題,這不正是@ user3805057問,但如果真有這樣的情況:一個行沒有包裹在輸入文件中,這將導致獲取軌道連接的其餘部分。 –

+0

該zip不會做你認爲它做的事。 'l = [1,2,3,4,5,6]'。 (1,1 [1:])→[(1,2),(2,3),(3,4),(4,5),(5,6)]。相反,'zip(l [:: 2],l [1 :: 2])' – Paul

+0

@Paul你是對的,謝謝!固定。 –

相關問題