Replace \n with <br />

PythonStringReplaceNewline

Python Problem Overview


I'm parsing text from file with Python. I have to replace all newlines (\n) with
cause this text will build html-content. For example, here is some line from file:

'title\n'

Now I do:

thatLine.replace('\n', '<br />')
print thatLine

And I still see the text with newline after it.

Python Solutions


Solution 1 - Python

thatLine = thatLine.replace('\n', '<br />')

str.replace() returns a copy of the string, it doesn't modify the string you pass in.

Solution 2 - Python

Just for kicks, you could also do

mytext = "<br />".join(mytext.split("\n"))

to replace all newlines in a string with <br />.

Solution 3 - Python

For some reason using python3 I had to escape the ""-sign

somestring.replace('\\n', '')

Hope this helps someone else!

Solution 4 - Python

To handle many newline delimiters, including character combinations like \r\n, use splitlines (see this related post) use the following:

'<br />'.join(thatLine.splitlines())

Solution 5 - Python

thatLine = thatLine.replace('\n', '<br />')

Strings in Python are immutable. You might need to recreate it with the assignment operator.

Solution 6 - Python

You could also have problems if the string has <, > or & chars in it, etc. Pass it to cgi.escape() to deal with those.

http://docs.python.org/library/cgi.html?highlight=cgi#cgi.escape

Solution 7 - Python

The Problem is When you denote '\n' in the replace() call , '\n' is treated as a String length=4 made out of ' \ n '
To get rid of this, use ascii notation. http://www.asciitable.com/

example:

newLine = chr(10)
thatLine=thatLine.replace(newLine , '<br />')

print(thatLine) #python3

print thatLine #python2 .

Solution 8 - Python

I know this is an old thread but I tried the suggested answers and unfortunately simply replacing line breaks with <br /> didn't do what I needed it to. It simply rendered them literally as text.

One solution would have been to disable autoescape like this: {% autoescape false %}{{ mystring }}{% endautoescape %} and this works fine but this is no good if you have user-provided content. So this was also not a solution for me.

So this is what I used:

In Python:

newvar = mystring.split('\n')

And then, passing newvar into my Jinja template:

{% for line in newvar %}
    <br />{{ line }}
{% endfor %}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMax FraiView Question on Stackoverflow
Solution 1 - PythonFalmarriView Answer on Stackoverflow
Solution 2 - PythonTim PietzckerView Answer on Stackoverflow
Solution 3 - PythonMikko PView Answer on Stackoverflow
Solution 4 - PythonteichertView Answer on Stackoverflow
Solution 5 - PythonerickbView Answer on Stackoverflow
Solution 6 - PythongreggoView Answer on Stackoverflow
Solution 7 - Pythonuser2458922View Answer on Stackoverflow
Solution 8 - PythonDangerPawsView Answer on Stackoverflow