2014-09-04 119 views
0

我在Python中有一個系統,這些系統創建一個套接字並從安裝在卡車和汽車上的跟蹤器接收信息。不能去除字符串中的 r

其中一個跟蹤器發送字符串\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

我該如何處理呢?我卡住了。

回答

0

聽起來像這是兩個問題。回答第一個可能解決第二個問題。

您是否嘗試過使用.rstrip()方法?

your_string.rstrip() 

如果要分割\ r或新行上的行,請使用python分界線。

your_string.splitlines() 
+0

有時候,字符串就像這個「ASDASD \ rDSADAFJASF \ rSDAHGYSD」。所以,這就是爲什麼我試圖首先拆分 – 2014-09-04 13:03:34

+0

在這種情況下,只需使用your_string.splitlines() – 2014-09-04 13:06:40

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分離器未處於有.. )