Xerath
Xerath

Reputation: 1099

Python: Reading a file and reverse all lines

So I'm trying to reverse all lines, but instead I get totaly strange reverse, it puts 4th line on the 1st line with the 5 line...

How file looks before reversing:

1 line
2 line
3 line
4 line
5 line

After reversing:

5 line4 line
3 line
2 line
1 line

Here is the code:

    file = open(filename, "r")
    list = file.readlines()
    file.close()

    list.reverse()

    file = open(filename, "w")
    for value in list:
        file.write(value)
    file.close()

Upvotes: 2

Views: 6814

Answers (2)

SimonT
SimonT

Reputation: 2359

Every line of the file has a newline character \n at the end of it, except for the very last line.

The simplest way would be to do this:

file.open(filename,'r')
lines = file.read().split("\n")
file.close()
file = open(filename, "w")
file.write("\n".join(lines[::-1]))
file.close()

You could also try using str.strip() or str.rstrip() to remove all whitespace from the ends of a string or just the right end. This, however, would also remove spaces, tabs, etc.

Upvotes: 3

tmrlvi
tmrlvi

Reputation: 2361

It seems that you didn't have the end line sign in the last line (the '\n'). It could be fixed easily by adding '\n' when needed:

file = open(filename, "w")
    for value in list:
         file.write(value.rstrip() + "\n")
    file.close()

Upvotes: 3

Related Questions