2013-03-25 2 views
1

Как удалить пробел и полосу возврата каретки новой строки из строки? Я пробовал:Как удалить символы до и после строки в python?

a = [] 
for i in range(len(lines)): 
    a.append(lines[i].rstrip().lstrip('\n')) 

строки - это список строк, которые были созданы с помощью функции readlines().

+0

Вы не сказали нам, как то, что вы пробовали, было неправильным. Вы получили сообщение об ошибке (и если да, то какая ошибка, где находится трассировка стека)? Неожиданный результат (и если да, то что это было)? –

+0

Если я могу вам предложить, вместо того, чтобы перебирать индекс 'i', вы можете сделать' для строки в строках'. Чище и более питонов! – whatyouhide

+0

Стоит также отметить, что циклы 'for' Python' for' повторяются по объектам, а не индексы - Python не предназначен для циклического преобразования по индексу. Вместо того, чтобы делать всю эту дополнительную работу, переходите непосредственно к файловому объекту. Вам не нужно использовать 'readlines()', чтобы получить список (что менее эффективно с точки зрения памяти), поскольку файловый объект является самим итератором. –

ответ

5

str.strip() удаляет все пробелы с обеих сторон строки, так что самый простой способ сделать то, что вы хотите, это просто:

with open("source.txt") as file: 
    a = [line.strip() for line in file] 

Проблема с кода вы используете str.lstrip() и str.rstrip() неправильный путь вокруг - новая строка справа, но вы пытаетесь разбить ее слева. Новая строка лишится, так как str.rstrip() разделяет все пробелы справа (включая символы новой строки), а str.lstrip("\n") не находит символ новой строки слева и поэтому ничего не делает, поэтому ваша проблема.

Если вам нужно оставить конечные пробелы кроме символ новой строки, то вы хотите line.rstrip("\n").lstrip() - замена аргументы для левой и правой полосы из исходного кода. Это обеспечило бы исключение пробелов, отличных от новой строки, как это было бы с вышеуказанным кодом.

Обратите внимание, что для этого я использую list comprehension - он более читабельный и эффективный, и хороший способ выполнять такие задачи.

Я также контактирую непосредственно над файловым объектом, поскольку это более эффективно (строки не нужно загружать в память). Обратите внимание, мое использование the with statement для открытия файлов - это лучшая практика в Python, как он защищает вас от тонких ошибок, и (опять же) более читаемого

2
a = [line.strip() for line in lines] 

Я думаю, что лучше раздеться, прежде чем положить его в линию список

Смежные вопросы