2009-11-18 2 views
1

Когда вы запускаете что-то через popen в Python, результаты поступают из буфера с десятичным значением CR-LF возврата каретки (13) в конце каждой строки. Как удалить это из строки Python?Удалить из строки python

+0

Не всплывает поддержка флага режима «b», чтобы включить двоичный режим, который можно было бы избавиться от \ r для начала. – tyranid

+1

двоичный режим будет тем, который * хранит * the \ r. Текстовый режим может избавиться от него. –

+0

Собственно, '' b'' заставляет '' \ r'' быть сохраненным (если он поддерживается - не проверял). –

ответ

4

Вы можете просто сделать

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

заменить все вхождения CRNL только с NL, который, кажется, что вы хотите.

+0

Также необходимо добавить .rstrip ("\ r \ n") для трейдинга CRLF – Superdooperhero

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

Если они находятся в конце строки (ы), я предложил бы использовать:

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

Вы также можете использовать rstrip() без параметров, которые будут устранять пробелы, а также.

0

На самом деле, вы можете просто сделать следующее:

s = s.strip() 

Это удалит все посторонние пробелы, включая CR и ЛФ, начальные и конечные строки.

s = s.rstrip() 

Выполняет то же самое, но только завершает строку.

То есть:

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

S теперь содержит "Сейчас настало время для всех хорошо ...

s = s.rstrip() 

s теперь содержит" Сейчас настало время для всех хорошо ... '

См. 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 
Смежные вопросы