添加字符串时输出中额外的换行符

时间:2019-06-14 17:47:34

标签: python

我有一个类似的文本文件

3 forwhomthebelltolls
-6 verycomplexnumber

问题是,如果整数 K 为正,则采用前 K 个字符并将其放在字符串的末尾。如果为负,则取最后的 K 个字符并将其放在字符串的开头。像这样:

whomthebelltollsfor
numberverycomplex

我的代码是

file = open("tex.txt","r")

for line in file:
    K, sentence = int(line.split(" ")[0]), line.split(" ")[1]
    new_sentence = sentence[K:] + sentence[:K]
    print(new_sentence)

但是它会打印如下值:

whomthebelltolls
for
numberverycomplex

我不明白为什么会这样。我只是添加了两个字符串,但是在打印部分中,添加的第二部分出现了问题。

2 个答案:

答案 0 :(得分:4)

文件的实际内容:

3 forwhomthebelltolls\n
-6 verycomplexnumber

当您使用for line in file遍历文件时,您将进入 entire 行,包括结尾的换行符。您永远不会删除它。因此,sentence[K:]解析为whomthebelltolls\n,而sentence[:k]解析为for。整个字符串为whomthebelltolls\nfor。由于字符串的中间有换行符,所以将其打印出来。

要解决此问题,请先去除字符串:

for line in file:
    K, sentence = int(line.split(" ")[0]), line.split(" ")[1].strip()
    ...

答案 1 :(得分:4)

如果逐行遍历文件,则每一行都将包含尾随换行符,因此在第一次迭代中line实际上是forwhomthebelltolls\n

现在,当您构造new_sentence时,您将执行以下操作:

 new_sentence = 'forwhomthebelltolls\n'[3:] + 'forwhomthebelltolls\n'[:3]
              =    'whomthebelltolls\n'     + 'for'
              = 'whomthebelltolls\nfor'

打印为:

whomthebelltolls
for

要摆脱结尾的换行符,请使用.strip()(如line=line.strip()