如何在 python 中将第二行连接到第一行的末尾?

How to join second line to end of first line in 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\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

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

代码:

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("                                                                   ","")

在这里,我只是用空 space 替换了 spaces 但我不知道如何将这些替换的偶数行连接到奇数行的末尾。

有人可以帮我做同样的事情吗?

提前致谢。

大家好,首先非常感谢您的回复。我尝试了所有方法,但下面的方法是正确的:

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

输出:

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

而不是 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。 当然,这是假设 all list/file 中的条目恰好跨越两行。

如果它们可以跨越任意数量的行(仅一两行,或者五行),那么这将变得更加复杂。在这种情况下,您可以尝试这样的操作:

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

注意:如果这些确实是文件中的行,您可能必须将 strip 应用于 所有 这些行,即 x.strip()merged.append(line.strip()),因为每一行都将由 \n 终止,您可能希望摆脱它。

将整个文件作为单个字符串读取,然后将整个白色space替换为单个制表符:

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

这会匹配并删除一个换行符后跟 20 个 或更多 space 的序列,将它们替换为制表符。 (这样我就不必计算 space 的精确数量,如果某些行略有不同,程序仍然有效)。 如果您不想在连接的行之间使用制表符,只需使用 space (" ") 而不是 "\t".

如果您必须将结果作为行列表,请在之后拆分 text

merged = text.splitlines()