2013-08-02 1 views
0

Я пытался использовать функцию rstrip(), но она не работает должным образом. Например, если я запускаю это:Python rstrip() (для вкладок) не работает как ожидалось

lines = ['tra\tla\tla\t\t\t\n', 'tri\tli\tli\t\t\t\n', 'tro\tlo\tlo\t\t\t\n'] 

for line in lines: 
    line.rstrip('\t') 

print lines 

возвращает

['tra\tla\tla\t\t\t\n', 'tri\tli\tli\t\t\t\n', 'tro\tlo\tlo\t\t\t\n'] 

, тогда как я хочу, чтобы вернуться:

['tra\tla\tla\n', 'tri\tli\tli\n', 'tro\tlo\tlo\n'] 

Что здесь проблема?

+1

Строки в питоне неизменны, а это означает, что строковые функции * всегда * возвращают новую строку, вместо того, чтобы изменить его на месте. –

ответ

4

Функция возвращает новую, лишенную строку, но вы отбрасываете это возвращаемое значение.

Используйте вместо этого список, чтобы заменить весь список lines; вам также нужно будет игнорировать новые строки в конце; метод .rstrip() не будет игнорировать те из вас.

lines = [line[:-1].rstrip('\t') + '\n' for line in lines] 

Демо:

>>> lines = ['tra\tla\tla\t\t\t\n', 'tri\tli\tli\t\t\t\n', 'tro\tlo\tlo\t\t\t\n'] 
>>> [line[:-1].rstrip('\t') + '\n' for line in lines] 
['tra\tla\tla\n', 'tri\tli\tli\n', 'tro\tlo\tlo\n'] 
+0

Вместо удаления последнего символа срезом вы можете использовать 'rstrip ('\ t \ n')' и удалить их оба одновременно, или просто использовать 'rstrip()' и также избавиться от пробелов. –

+0

@MarkRansom: поскольку вывод включает в себя и новую строку, я предполагал, что ее нужно сохранить. Самая большая проблема здесь в том, что OP предполагает, что строки изменены на месте. –

+0

Но вы не сохраняете его, вы добавляете его обратно после факта. Мог бы также легко это сделать. –