【问题标题】:Split string using a newline delimiter with Python [duplicate]在 Python 中使用换行符分隔字符串
【发布时间】:2014-03-29 08:57:23
【问题描述】:

我需要分隔其中有新行的字符串。我将如何实现它?请参考以下代码。

输入:

data = """a,b,c
d,e,f
g,h,i
j,k,l"""

所需的输出:

['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

我尝试了以下方法:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')

【问题讨论】:

  • repr(data) 的输出是什么?

标签: python string python-2.7


【解决方案1】:

我们也可以使用regex的split方法。

import re

data = """a,b,c
d,e,f
g,h,i
j,k,l"""

output = re.split("\n", data)

print(output) #['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

希望这会对某人有所帮助。

【讨论】:

    【解决方案2】:

    由于拆分得到一个字符串作为分隔符,你应该有额外的反斜杠 输出 = data.split('\n')

    【讨论】:

      【解决方案3】:

      如果你想只用换行符分割,你可以使用str.splitlines():

      例子:

      >>> data = """a,b,c
      ... d,e,f
      ... g,h,i
      ... j,k,l"""
      >>> data
      'a,b,c\nd,e,f\ng,h,i\nj,k,l'
      >>> data.splitlines()
      ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
      

      使用str.split(),您的情况也可以:

      >>> data = """a,b,c
      ... d,e,f
      ... g,h,i
      ... j,k,l"""
      >>> data
      'a,b,c\nd,e,f\ng,h,i\nj,k,l'
      >>> data.split()
      ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
      

      但是,如果您有空格(或制表符),它将失败:

      >>> data = """
      ... a, eqw, qwe
      ... v, ewr, err
      ... """
      >>> data
      '\na, eqw, qwe\nv, ewr, err\n'
      >>> data.split()
      ['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']
      

      【讨论】:

      • 似乎很奇怪,您不必像data.split('\n')那样传递字符来拆分?
      【解决方案4】:

      str.splitlines 方法应该给你正是这样。

      >>> data = """a,b,c
      ... d,e,f
      ... g,h,i
      ... j,k,l"""
      >>> data.splitlines()
      ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
      

      【讨论】:

      • str.splitlines 的一个方便之处在于它会删除最后的\n(如果存在)。即'foo\nbar\n'.split() == ['foo', 'bar', '']str.splitlines('foo\nbar\n') == ['foo', 'bar']
      【解决方案5】:

      有一种专门用于此目的的方法:

      data.splitlines()
      ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
      

      【讨论】:

        【解决方案6】:

        给你:

        >>> data = """a,b,c
        d,e,f
        g,h,i
        j,k,l"""
        >>> data.split()  # split automatically splits through \n and space
        ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
        >>> 
        

        【讨论】:

          【解决方案7】:
          data = """a,b,c
          d,e,f
          g,h,i
          j,k,l"""
          
          print(data.split())       # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
          

          str.split,默认情况下,由所有空白字符分割。如果实际字符串有任何其他空白字符,您可能需要使用

          print(data.split("\n"))   # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
          

          或者@Ashwini Chaudhary suggested in the comments,你可以使用

          print(data.splitlines())
          

          【讨论】:

          • 为了安全起见使用.splitlines,如果字符串有空格等怎么办?
          • @AshwiniChaudhary 是的,这就是我建议split("\n") 的原因。 splitlines.split("\n") 好吗?
          • 它也适用于\r\n 和其他类型的行边界。
          • 如果您的字符串以\n 结尾,splitlines() 将忽略它,而split("\n") 将在结果末尾有一个额外的空字符串""
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-02
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 2013-12-31
          相关资源
          最近更新 更多