How to read a file without newlines?

PythonLine BreaksReadlines

Python Problem Overview


In Python, calling

temp = open(filename,'r').readlines()

results in a list in which each element is a line in the file. It's a little stupid but still: readlines() also writes newline character to each element, something I do not wish to happen.

How can I avoid it?

Python Solutions


Solution 1 - Python

You can read the whole file and split lines using str.splitlines:

temp = file.read().splitlines()

Or you can strip the newline by hand:

temp = [line[:-1] for line in file]

Note: this last solution only works if the file ends with a newline, otherwise the last line will lose a character.

This assumption is true in most cases (especially for files created by text editors, which often do add an ending newline anyway).

If you want to avoid this you can add a newline at the end of file:

with open(the_file, 'r+') as f:
    f.seek(-1, 2)  # go at the end of the file
    if f.read(1) != '\n':
        # add missing newline if not already present
        f.write('\n')
        f.flush()
        f.seek(0)
    lines = [line[:-1] for line in f]

Or a simpler alternative is to strip the newline instead:

[line.rstrip('\n') for line in file]

Or even, although pretty unreadable:

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

Which exploits the fact that the return value of or isn't a boolean, but the object that was evaluated true or false.


The readlines method is actually equivalent to:

def readlines(self):
    lines = []
    for line in iter(self.readline, ''):
        lines.append(line)
    return lines

# or equivalently

def readlines(self):
    lines = []
    while True:
        line = self.readline()
        if not line:
            break
        lines.append(line)
    return lines

Since readline() keeps the newline also readlines() keeps it.

Note: for symmetry to readlines() the writelines() method does not add ending newlines, so f2.writelines(f.readlines()) produces an exact copy of f in f2.

Solution 2 - Python

temp = open(filename,'r').read().splitlines()

Solution 3 - Python

Reading file one row at the time. Removing unwanted chars from end of the string with str.rstrip(chars).

with open(filename, 'r') as fileobj:
    for row in fileobj:
        print(row.rstrip('\n'))

See also str.strip([chars]) and str.lstrip([chars]).

Solution 4 - Python

I think this is the best option.

temp = [line.strip() for line in file.readlines()]

Solution 5 - Python

temp = open(filename,'r').read().splitlines()

Solution 6 - Python

Try this:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  

Solution 7 - Python

To get rid of trailing end-of-line (/n) characters and of empty list values (''), try:

f = open(path_sample, "r")
lines = [line.rstrip('\n') for line in f.readlines() if line.strip() != '']

Solution 8 - Python

You can read the file as a list easily using a list comprehension

with open("foo.txt", 'r') as f:
    lst = [row.rstrip('\n') for row in f]

Solution 9 - Python

This script here will take lines from file and save every line without newline with ,0 at the end in file2.

file = open("temp.txt", "+r")
file2 = open("res.txt", "+w")
for line in file:
    file2.writelines(f"{line.splitlines()[0]},0\n")
file2.close()

if you looked at line, this value is data\n, so we put splitlines()

to make it as an array and [0] to choose the only word data

Solution 10 - Python

my_file = open("first_file.txt", "r")
for line in my_file.readlines():
    if line[-1:] == "\n":
        print(line[:-1])
    else:
        print(line)
my_file.close() 

Solution 11 - Python

import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])

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
QuestionYotamView Question on Stackoverflow
Solution 1 - PythonBakuriuView Answer on Stackoverflow
Solution 2 - PythonvivekView Answer on Stackoverflow
Solution 3 - PythonO-9View Answer on Stackoverflow
Solution 4 - PythonRENZOView Answer on Stackoverflow
Solution 5 - PythonMarcelView Answer on Stackoverflow
Solution 6 - PythonNitesh SoniView Answer on Stackoverflow
Solution 7 - PythonYScharfView Answer on Stackoverflow
Solution 8 - PythonmarbelView Answer on Stackoverflow
Solution 9 - PythonAbdelrahman SalehView Answer on Stackoverflow
Solution 10 - PythonNecrissView Answer on Stackoverflow
Solution 11 - PythonsrusView Answer on Stackoverflow