Solving problem is about exposing yourself to as many situations as possible like How to read a file without newlines? and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about How to read a file without newlines?, which can be followed any time. Take easy to follow this discuss.
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?
You can read the whole file and split lines using
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.
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
readline() keeps the newline also
readlines() keeps it.
Note: for symmetry to
writelines() method does not add ending newlines, so
f2.writelines(f.readlines()) produces an exact copy of
temp = open(filename,'r').read().split('n')
Reading file one row at the time. Removing unwanted chars with from end of the string
with open(filename, 'r') as fileobj: for row in fileobj: print( row.rstrip('n') )
(python >= 2.0)
temp = open(filename,'r').read().splitlines()
I think this is the best option.
temp = [line.strip() for line in file.readlines()]
u=open("url.txt","r") url=u.read().replace('n','') print(url)
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()
import csv with open(filename) as f: csvreader = csv.reader(f) for line in csvreader: print(line)