Skip to content Skip to sidebar Skip to footer

Python "split" On Empty New Line

Trying to use a python split on a 'empty' newline but not any other new lines. I tried a few other example I found but none of them seem to work. Data example: (*,224.0.0.0/4) RP

Solution 1:

It's quite easy when you consider what is on an empty line. It's just the newline character, so splitting on an empty line would be splitting on two newline characters in sequence (one from the previous non-empty line, one is the 'whole' empty line.

myarray = output.split("\n\n")
for line in myarray:
    print line
    print"Next Line"

and for Python 3:

myarray = output.split("\n\n")
for line in myarray:
    print(line)
    print("Next Line")

If you want to be platform-agnostic, use os.linesep + os.linesep instead of "\n\n", as is mentioned in Lost's answer.

Solution 2:

This works in the case where multiple blank lines should be treated as one.

import re

defsplit_on_empty_lines(s):

    # greedily match 2 or more new-lines
    blank_line_regex = r"(?:\r?\n){2,}"return re.split(blank_line_regex, s.strip())

The regex is a bit odd.

  1. Firstly, the greedy matching means that many blank lines count as a single match, i.e. 6 blank lines makes one split, not three splits.
  2. Secondly, the pattern doesn't just match \n but either \r\n (for Windows) or \n (for Linux/Mac).
  3. Thirdly, the group (denoted by parentheses) needs to have ?: inside the opening parenthesis to make it a "non-capturing" group, which changes the behaviour of re.split.

For example:

s = """

hello
world

this is







a test

"""

split_on_empty_lines(s)

returns

['hello\nworld', 'this is', 'a test']

Solution 3:

A blank line is just two new lines. So your easiest solution is probably to check for two new lines (UNLESS you expect to have a situation where you'll have more than two blank lines in a row).

import os
myarray = [] #As DeepSpace notes, thisis not necessary as split will return a list. No impact to later code, just more typing
myarray = output.split(os.linesep + os.linesep) ##use os.linesep to make this compatible on more systems

That would be where I'd start anyway

Post a Comment for "Python "split" On Empty New Line"