如果字符串是换行符,我如何删除它的最后一个字符?

"abc\n"  -->  "abc"

当前回答

这将完全复制perl的chomp(减去数组上的行为)作为“\n”行终止符:

def chomp(x):
    if x.endswith("\r\n"): return x[:-2]
    if x.endswith("\n") or x.endswith("\r"): return x[:-1]
    return x

(注意:它不修改字符串“就地”;它不删除多余的尾随空格;考虑到\r\n)

其他回答

对于perl的chomp,似乎没有完美的模拟。特别是,rstrip不能处理像\r\n这样的多字符换行符。然而,分裂线确实如这里所指出的那样。根据我对另一个问题的回答,您可以组合连接和拆分线来删除/替换字符串中的所有换行符:

''.join(s.splitlines())

下面只删除了一个尾随换行符(我相信chomp会这样做)。将True作为keeponds参数传递给拆分线将保留分隔符。然后,再次调用拆分线以删除最后一行上的分隔符:

def chomp(s):
    if len(s):
        lines = s.splitlines(True)
        last = lines.pop()
        return ''.join(lines + last.splitlines())
    else:
        return ''

只需使用:

line = line.rstrip("\n")

or

line = line.strip("\n")

你不需要这些复杂的东西

您可以使用line=line.rstrip('\n')。这将从字符串末尾删除所有换行符,而不仅仅是一行。

注意,rstrip的行为与Perl的chomp()不同,因为它不会修改字符串。也就是说,在Perl中:

$x="a\n";

chomp $x

结果$x为“a”。

但在Python中:

x="a\n"

x.rstrip()

将意味着x的值仍然是“a \n”。即使x=x.rstrip()也不总是给出相同的结果,因为它会从字符串末尾删除所有空格,而不是最多一个换行符。

您可以使用strip:

line = line.strip()

演示:

>>> "\n\n hello world \n\n".strip()
'hello world'