无法去除字符串中的\r

0 投票
2 回答
548 浏览
提问于 2025-04-19 19:40

我有一个用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 分隔符并不在字符串里……)

撰写回答