2013-08-02 41 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

字符串在Python是不可改變的,這意味着字符串函數*總是*返回新的字符串,而不是在地方修改它的。 –

回答

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

但是你不保留它,你將它添加的事實後回來。不妨以簡單的方式剝離它。 –