2015-05-11 48 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你是对的,谢谢!固定。 –

相关问题