2009-11-18 85 views
1

當您在Python中通過popen運行某些內容時,結果會從每行結尾處的回車(13)的CR-LF十進制值的緩衝區中進入。你如何從Python字符串中刪除它?從Python字符串中刪除

+0

不popen支持'b'模式標誌打開二進制模式,可能會擺脫\ r開始。 – tyranid 2009-11-18 22:40:22

+1

二進制模式將是*保存* r的那個模式。文本模式可能會擺脫它。 – 2009-11-18 22:43:31

+0

實際上,''b''會強制保留'\ r''(如果支持 - 沒有檢查)。 – 2009-11-18 22:43:33

回答

4

你可以簡單地做

s = s.replace('\r\n', '\n') 

只有NL,這似乎是你想要更換CRNL的所有地方。

+0

還需要爲追蹤的CRLF添加.rstrip(「\ r \ n」) – Superdooperhero 2012-12-22 21:47:43

2
buffer = "<text from your subprocess here>\r\n" 
no_cr = buffer.replace("\r\n", "\n") 
2

如果他們是在字符串(S)的結束,我會建議使用:

buffer = "<text from your subprocess here>\r\n" 
no_cr = buffer.rstrip("\r\n") 

您還可以使用rstrip()可以不帶參數,這將刪除空格爲好。

0

其實,你可以簡單地做到以下幾點:

s = s.strip() 

這將消除任何多餘的空白,包括CR和LF類,開頭或結尾的字符串。

s = s.rstrip() 

是否一樣,但只跟蹤字符串。

即:

s = ' Now is the time for all good... \t\n\r " 
s = s.strip() 

š現在包含「現在是所有好時間......」

s = s.rstrip() 

小號現在包含「現在是所有好時間...... '

有關更多信息,請參見http://docs.python.org/library/stdtypes.html

0

你也可以做s = s.replace('\r', '')

0

replace('\ r \ n','\ n')應該有效,但有時它不會。多麼奇怪。相反,你可以使用:

lines = buffer.split('\r') 
cleanbuffer = '' 
for line in lines: cleanbuffer = cleanbuffer + line 
lines = buffer.split('\r') 
cleanbuffer = '' 
for line in lines: cleanbuffer = cleanbuffer + line