2014-09-04 2 views
0

나는 시스템이 소켓을 만들고 트럭과 자동차에 설치된 추적기에서 정보를받는 파이썬으로 하나의 시스템을 사용했습니다.문자열에서 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 또는 새 줄에 줄을 분할하려면 파이썬 splitlines를 사용하십시오.

your_string.splitlines() 
+0

가끔은 문자열이 "ASDASD \ rDSADAFJASF \ rSDAHGYSD"와 같이 나타납니다. 그래서, 그 이유는 내가 먼저 분할하려고 –

+0

그 경우에는 그냥 your_string.splitlines()를 사용하십시오. –

0

귀하의 문제가이 기능에 : 당신은 하나의 문자 \r에 분할하지 않을

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'] 

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

은 (분할 전체 문자열을 포함하는리스트를 반환 (분할은 \r 문자로 구분 된 문자열의 목록을 반환) .. .)

관련 문제