无法去除字符串中的\r
我有一个用Python写的系统,这个系统创建了一个套接字,用来接收安装在卡车和汽车上的追踪器发送的信息。
其中一个追踪器发送的字符串是用\r
作为分隔符的。但是,当我尝试用\r
来分割这个字符串时,却没有成功。
于是我尝试从我的字符串中去掉这些字符,但也没有效果。以下是我代码的一小部分:
try:
self.msg = self.client_conn.recv(settings.CONNECTION["BYTES_TO_RECEIVED"])
# Se não ter nenhuma mensagem, sai fora do loop
if not self.msg:
break
# Faz a validação da mensagem
if self.validate_message():
# Loop para passar por cada linha
for self.msg in self.split_messages():
# Remove outros caracteres
self.msg = str(self.msg).strip('\r\n').replace("\r", "")
print "Mensagem: " + repr(self.msg)
# Insere na fila
self.insert_queue()
# Continua o loop
continue
except:
# Insere nos logs
logger.Log(
logger.Log.LISTENER,
logger.Log.WARNING,
"O TRACKER %s:%s FECHOU A CONEXÃO" % self.client_info
)
# Sai do loop
break
我的函数叫做split_message,内容是:
def split_messages(self):
# Retorna o split das linhas
return self.msg.split('\\r')
所以,我的消息没有被分割,当我把这个字符串保存到数据库时,最后还会多出一些字符:
我该怎么处理这个问题呢?我卡住了。
2 个回答
0
听起来这其实是两个问题。回答第一个问题可能就能解决第二个问题。
你有没有试过用 .rstrip() 这个方法呢?
your_string.rstrip()
如果你想根据 \r 或换行符来分割行,可以使用 Python 的 splitlines 方法。
your_string.splitlines()
0
你的问题出在这个函数里:
def split_messages(self):
# Retorna o split das linhas
return self.msg.split('\\r')
注意,你并不是在用单个字符 \r
来分割,而是试图用一对字符 \\r
来分割(第一个斜杠是为了让第二个斜杠作为一个普通的斜杠字符)。
>>> s = "1\r2\r3\r4"
>>> s.split('\r')
['1', '2', '3', '4']
(分割函数会返回一个由 \r
字符分开的字符串列表)
>>> s.split('\\r')
['1\r2\r3\r4']
(分割函数返回的是一个包含整个字符串的列表,因为你请求的 \\r
分隔符并不在字符串里……)