Reputation: 818
I am trying to do a simple parsing on a text in python which I have no issues with in bash using tr '\n' ' '. Basically to get all of the lines on a single line. In python print line is a bit different from what I understand. re.sub cannot find my new line because it doesn't exist even though when I print to an output it does. Can someone explain how I can work around this issue in python?
Here is my code so far:
# -*- iso-8859-1 -*-
import re
def proc():
f= open('out.txt', 'r')
lines=f.readlines()
for line in lines:
line = line.strip()
if '[' in line:
line_1 = line
line_1_split = line_1.split(' ')[0]
line_2 = re.sub(r'\n',r' ', line_1_split)
print line_2
proc()
Edit: I know that "print line," will print without the newline. The issue is that I need to handle these lines both before and after doing operations line by line. My code in shell uses sed, awk and tr to do this.
Upvotes: 0
Views: 2964
Reputation: 26901
Using with
ensures you close the file after iteration.
Iterating saves memory and doesn't load the entire file.
rstrip()
removes the newline in the end.
Combined:
with open('out.txt', 'r') as f:
for line in f:
print line.rstrip(),
Upvotes: 1
Reputation: 4998
When you call the print
statement, you automatically add a new line. Just add a comma:
print line_2,
And it will all print on the same line.
Mind you, if you're trying to get all lines of a file, and print them on a single line, there are more efficient ways to do this:
with open('out.txt', 'r') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
# Some extra line formatting stuff goes here
print line, # Note the comma!
Alternatively, just join the lines on a string:
everything_on_one_line = ''.join(i.strip() for i in f.readlines())
print everything_on_one_line
Upvotes: 1
Reputation: 40230
You can write directly to stdout to avoid the automatic newline of print
:
from sys import stdout
stdout.write("foo")
stdout.write("bar\n")
This will print foobar
on a single line.
Upvotes: 1
Reputation: 1323
Use replace()
method.
file = open('out.txt', 'r')
data = file.read()
file.close()
data.replace('\n', '')
Upvotes: 0