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

Posted

技术标签:

【中文标题】如何在python中将第二行连接到第一行的末尾?【英文标题】:How to join second line to end of first line in python? 【发布时间】:2015-07-22 02:48:20 【问题描述】:

我尝试阅读如下行:

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

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

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

提前谢谢你。

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

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

【问题讨论】:

【参考方案1】:

代替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,你可能想摆脱它。

【讨论】:

请注意,这正是@user3805057 所要求的,但如果有一个实例在输入文件中没有换行,这将导致获取轨道的其余连接. 那个 zip 并没有像你想象的那样做。 l=[1,2,3,4,5,6]zip(l, l[1:]) --> [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)] 。相反,zip(l[::2],l[1::2])【参考方案2】:

将整个文件作为单个字符串读取,然后用单个制表符替换整个空格:

filepointer = open("INPUT.txt")
text = filepointer.read()
text = re.sub(r"\n\s20,", "\t", text)

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

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

merged = text.splitlines()

【讨论】:

很高兴听到这个消息!一旦你解决了你的问题,不要忘记点击大勾号“接受”你认为最有用的答案。你也可以投票给你认为有用的所有答案:-)

以上是关于如何在python中将第二行连接到第一行的末尾?的主要内容,如果未能解决你的问题,请参考以下文章

如何用第二行扩展表格的第一行?

WPS第二行文字前面有大量空白,按退格不会动,只是把上一行末尾的字去掉。

求vb.net高手,如何设置datagridview的行标题,比如行标题设置成“第一行”“第二行”“第三行”

Latex 下如何处理非首行的缩进对齐?

python脚本 从第二行开始读取 文件读取 跳过第一行 跳过前几行

EXCEL里如何求第一行和指定一行,第二行和倒数第二行,第三行和倒数第三行。。。。。。的平均值?