如何在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的行标题,比如行标题设置成“第一行”“第二行”“第三行”