badner
badner

Reputation: 818

Replace newline in python when reading line for line

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

Answers (4)

Bharel
Bharel

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

Zizouz212
Zizouz212

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

Emil H
Emil H

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

Laszlowaty
Laszlowaty

Reputation: 1323

Use replace() method.

file = open('out.txt', 'r')
data = file.read()
file.close()
data.replace('\n', '')

Upvotes: 0

Related Questions