2

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()
Anshul Goyal
77.7k42 gold badges161 silver badges196 bronze badges
asked Apr 12, 2014 at 22:41
1

2 Answers 2

3

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()
answered Apr 12, 2014 at 22:45
1
  • use with-statement to close the file even if an exception happens: with open(filename, 'w') as file: file.writelines(map(str.rstrip, lines)) Commented Apr 13, 2014 at 0:43
3

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.

answered Apr 12, 2014 at 22:45

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.