简体   繁体   中英

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.

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.

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

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(),

Use replace() method.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM