Как я могу удалить завершающий перевод строки в Python? - PullRequest
1498 голосов
/ 08 ноября 2008

Что такое Python-эквивалент функции Perl chomp, которая удаляет последний символ строки, если она является новой строкой?

Ответы [ 26 ]

4 голосов
/ 22 ноября 2016
>>> '   spacious   '.rstrip()
'   spacious'
>>> "AABAA".rstrip("A")
  'AAB'
>>> "ABBA".rstrip("AB") # both AB and BA are stripped
   ''
>>> "ABCABBA".rstrip("AB")
   'ABC'
4 голосов
/ 20 мая 2016

Просто используйте:

line = line.rstrip("\n")

или

line = line.strip("\n")

Вам не нужны эти сложные вещи

3 голосов
/ 22 ноября 2016

Есть три типа концов строк, с которыми мы обычно сталкиваемся: \n, \r и \r\n. Довольно простое регулярное выражение в re.sub, а именно r"\r?\n?$", может перехватить их все.

(И мы должны поймать их всех , я прав?)

import re

re.sub(r"\r?\n?$", "", the_text, 1)

С последним аргументом мы ограничиваем количество заменяемых событий одним, в некоторой степени имитируя chomp. Пример:

import re

text_1 = "hellothere\n\n\n"
text_2 = "hellothere\n\n\r"
text_3 = "hellothere\n\n\r\n"

a = re.sub(r"\r?\n?$", "", text_1, 1)
b = re.sub(r"\r?\n?$", "", text_2, 1)
c = re.sub(r"\r?\n?$", "", text_3, 1)

... где a == b == c равно True.

1 голос
/ 15 июня 2018

Это будет работать как для Windows, так и для Linux (немного дороже с re sub, если вы ищете только новое решение)

import re 
if re.search("(\\r|)\\n$", line):
    line = re.sub("(\\r|)\\n$", "", line)

1 голос
/ 28 октября 2015

Если вас беспокоит скорость (скажем, у вас есть длинный список строк), и вы знаете природу символа новой строки, нарезка строк на самом деле быстрее, чем rstrip. Небольшой тест, чтобы проиллюстрировать это:

import time

loops = 50000000

def method1(loops=loops):
    test_string = 'num\n'
    t0 = time.time()
    for num in xrange(loops):
        out_sting = test_string[:-1]
    t1 = time.time()
    print('Method 1: ' + str(t1 - t0))

def method2(loops=loops):
    test_string = 'num\n'
    t0 = time.time()
    for num in xrange(loops):
        out_sting = test_string.rstrip()
    t1 = time.time()
    print('Method 2: ' + str(t1 - t0))

method1()
method2()

Выход:

Method 1: 3.92700004578
Method 2: 6.73000001907
0 голосов
/ 24 октября 2014

А поймать все:

line = line.rstrip('\r|\n')
...