【问题标题】:Python split string by space and strip newline charPython按空格分割字符串并去除换行符
【发布时间】:2014-10-04 20:42:00
【问题描述】:

我在 python 中有一个字符串,看起来像:

d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00 
ff ff 00 00 01 00 00 00  00 00 00 00 00 00 00 00 
36 00 00 00 36 00 00 00  00 1c 23 10 f8 f1 00 1b 
17 01 10 20 08 00 45 00  00 28 df 27 40 00 80 06 
2b 87 c7 08 1a 0a 0a 05  05 0a 5c ea 5c ea c2 1f 

我跳过了更多行。我想把每个数字放在一个列表中。当我使用 .split() 时,它不仅返回数字列表,还返回空格和 '\n',因为矩阵中间有两个空格,每行末尾都有换行符.所以我得到了:

['d4', 'c3', 'b2', 'a1', '02', '00', '04', '00', '', '00', …, '\nff', 'ff', '00'…]

我只希望数字出现在列表中,而不是其他任何东西,有人知道怎么做吗?提前感谢您的时间。

【问题讨论】:

    标签: python string split


    【解决方案1】:

    python string 文档有大量可以对字符串执行的操作。

    奇怪的是,.split() 并没有消除你所有的空白,正如 TheSoundDefense 上面提到的那样。

    要摆脱换行符,请尝试使用.replace(<target>,<replacement>) 方法,如下所示:

    a = '11 11 11 11  11 11 11 11 \n22 22 22 22  22 22 22 22 \n'
    b = a.replace('\n',' ')
    c = b.split()
    print c
    >>> ['11', '11', '11', '11', '11', '11', '11', '11', '22', '22', '22', '22', '22', '22', '22', '22']
    

    【讨论】:

    • 在类似“00\nff”的情况下会失败。
    • 已修复。我只真正提供了 .replace 选项,因为 OP 指定 .split() 对他不起作用。
    • 如果 OP 真的在使用 split(),这个 replace 根本没有效果;如果 OP 像 TheSoundDefense 所怀疑的那样使用split(" "),那么这只解决了'\n' 的问题,而不是双空格或其他任何问题。我想不出任何可以真正解决问题的场景。
    • 我在帖子中提到过。我想提供帮助,但没有足够的代表发表评论,所以我改为发布。至少我引用了文档,如果有的话。
    【解决方案2】:

    使用不带任何参数的split() 将拆分任何空格上的内容并将多个空格组合在一起。

    这是一个例子:

    s = """d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00 
    ff ff 00 00 01 00 00 00  00 00 00 00 00 00 00 00 
    36 00 00 00 36 00 00 00  00 1c 23 10 f8 f1 00 1b 
    17 01 10 20 08 00 45 00  00 28 df 27 40 00 80 06 
    2b 87 c7 08 1a 0a 0a 05  05 0a 5c ea 5c ea c2 1f"""
    
    data = s.split()
    

    在这种情况下,data 将如下所示:

    ['d4', 'c3', 'b2', 'a1', '02', '00', '04', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'ff', 'ff', '00', '00', '01', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '36', '00', '00', '00', '36', '00', '00', '00', '00', '1c', '23', '10', 'f8', 'f1', '00', '1b', '17', '01', '10', '20', '08', '00', '45', '00', '00', '28', 'df', '27', '40', '00', '80', '06', '2b', '87', 'c7', '08', '1a', '0a', '0a', '05', '05', '0a', '5c', 'ea', '5c', 'ea', 'c2', '1f']
    

    【讨论】:

      【解决方案3】:

      如果您使用.split(" "),那么您的程序将在每个空格上拆分,而不是在任何其他空格上。如果您改用.split(),程序将考虑多个空格、换行符、制表符和所有其他形式的空格。这应该可以满足您的需求。

      >>> teststr = "a   v w   ef sdv   \n   wef"
      >>> print teststr
      a   v w   ef sdv   
         wef
      >>> teststr.split()
      ['a', 'v', 'w', 'ef', 'sdv', 'wef']
      >>> teststr.split(" ")
      ['a', '', '', 'v', 'w', '', '', 'ef', 'sdv', '', '', '\n', '', '', 'wef']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多