无法在字符串中删除\ r \ n

时间:2014-09-04 12:53:14

标签: python string escaping

我在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')

所以,我的消息没有被拆分,当我在数据库中保存这个字符串时,我最后得到一些字符:

Database

我该如何处理?我被卡住了。

2 个答案:

答案 0 :(得分:0)

听起来这是两个问题。回答第一个可能解决第二个问题。

您是否尝试过使用 .rstrip()方法?

your_string.rstrip()

如果要分割\ r或\ n新行上的行,请使用python splitlines。

your_string.splitlines()

答案 1 :(得分: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']

(split返回由\r字符分隔的字符串列表)

>>> s.split('\\r')
['1\r2\r3\r4']

(split返回一个包含整个字符串的列表,因为请求的\\r分隔符不在那里......)