First, I will assume that you want to order the file lines according to lexicographic order (as strings), otherwise you will need to apply the appropriate casting to each line before ordering.
The cause of not working tells you the error in the first two cases:
In the first code you try to use the so-called
sort method of
linea1 , where
the open file, an object
_io.TextIOWrapper and that therefore does not have this method. Note that if you follow the Python style rules
sort is a method that acts in-place so it will only be defined, if it is, for mutable objects such as lists.
In the second case you try to use the so-called
sorted method on a string (because it's just that, a string with the name or path of your file).
str does not have that defined method either.
sorted if that is a prebuilt function that accepts any iterable and returns a list of items ordered.
In the third case, you use
sorted correctly on a string (not on your file), so at the end you would write in your file the following line
XUTTSONNLIFEEDDDAA.- which are the characters sorted lexicographically by
"ENDEUDADOS-FINAL.TXT" and this when the GC closes the file and the buffer is emptied, since you do not close the file explicitly and the changes may not be reflected immediately.
The simple solution is to effectively use the builtin
sorted and pass the file (which is iterable thanks to
readline ). It is good practice to always explicitly close an open file with
open using the
close method or use
with that will do it for you:
with open("ENDEUDADOS.txt") as in_file, open("ENDEUDADOS2.TXT","w") as out_file: