【问题标题】:Python - losing data when splitting after "\\" [closed]Python - 在“\\”之后拆分时丢失数据[关闭]
【发布时间】:2016-02-29 16:19:16
【问题描述】:

我在尝试分析以下形式的数据时遇到了一些问题:

"0\r\n\359"

其中的数字可以是任何整数(这些是我要收集的数字)。

x = "0\r\n\359"
x = x.split("\\")
print(x)

打印结果为['0\r\n\x1d9'] 这是不需要的。

我怎样才能让我的代码只打印数字,最好用一些东西分隔?

【问题讨论】:

  • 那是因为那不是\ 后跟r。它仅在您的字符串定义中显示为两个字符。但是在内存中的字符串中,它是一个字符:回车。在该特定字符串中没有反斜杠可以拆分。 \n 同上,这是一个字符:换行符。
  • 补充 @MarcB 所说的,\r\n 是 Windows 行结尾:CR-LF(回车换行)。
  • @MarcB 我很害怕,无论如何我可以分析完整的第二个整数吗?还是因为"\\" 而丢失了前两个数字
  • "\r\n" 上拆分,然后,您将在相同的文字回车/换行符上拆分。

标签: python string python-3.x split


【解决方案1】:

您的字符串中没有任何反斜杠。字符串文字中的反斜杠是转义符。 '\r' 是回车,'\n' 是换行符,'\35'(十六进制 1d)是称为“组分隔符”的控制字符。你可以试试原始字符串:

x = r"0\r\n\359"

【讨论】:

  • '\35' 我不知道是什么哈哈
【解决方案2】:

不确定这是否正是您想要的?:

\r\n 是作为回车和换行符的特殊字符,因此除非您将它们指定为原始字符串,否则您将无法拆分它们的反斜杠。

>>> re.search(r'\d+$', r'0\r\n\359').group()
'359'
>>> re.search(r'\d+$', '0\r\n\359').group()
'9'
>>> re.split(r'\\', r'0\r\n\359')
['0', 'r', 'n', '359']
>>> re.split(r'\\', '0\r\n\359')
['0\r\n\x1d9']

请注意,将r 添加到字符串中的不同之处在于,将其视为不转义\ 的行字符串。所以\35 就像之前的答案中提到的那样是另一个特殊/控制字符,除非您将字符串指定为原始字符串,否则它的数字无法检索。但这带来了你是否想要它的问题。

【讨论】:

  • 我确实想要,“359”的值对应于我的传感器扫描的角度。
  • 您是否可以控制收到的内容?..您可以更改发件人以在没有额外字符的情况下发送数字。我相信这将是您最好的选择,否则您将不得不解析和提取所需的数据。
  • 不是真的,我最后用一个计数器循环来“计数”我的数据,因为它们总是从 0 开始,但非常感谢你的帮助!
【解决方案3】:

尝试类似:

print ' something '.join(r"0\r\n\359".split('\\r\\n\\'))

【讨论】:

    【解决方案4】:

    您可能想研究用于解析字符串的正则表达式。如果要查找字符串中的所有整数表达式,可以使用 re.findall 和模式 r'\d+' 来提取所有连续数字组。以下是使用您提供的字符串的示例。

    >>> import re
    >>> x = '0\r\n359'
    >>> re.findall(r'\d+', x)
    ['0', '359']
    >>> 
    

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2021-05-25
      • 2019-02-15
      • 2023-03-08
      相关资源
      最近更新 更多