22

I would like to sort the file 'shopping.txt' in alphabetical order

shopping = open('shopping.txt')
line=shopping.readline()
while len(line)!=0:
    print(line, end ='')
    line=shopping.readline()
#for eachline in myFile:
#    print(eachline)
shopping.close()

6 Answers 6

62

Just to show something different instead of doing this in python, you can do this from a command line in Unix systems:

sort shopping.txt -o shopping.txt

and your file is sorted. Of course if you really want python for this: solution proposed by a lot of other people with reading file and sorting works fine

Sign up to request clarification or add additional context in comments.

1 Comment

Its better than writing scripts from scratch
29

An easy way to do this is using the sort() or sorted() functions.

lines = shopping.readlines()
lines.sort()

Alternatively:

lines = sorted(shopping.readlines())

The disadvantage is that you have to read the whole file into memory, though. If that's not a problem, you can use this simple code.

Comments

17

Use sorted function.

with open('shopping.txt', 'r') as r:
    for line in sorted(r):
        print(line, end='')

3 Comments

Could you please let me know whether this would take all lines in memory. How would this work. Does this read input lazily.
@AkshayHazari: sorted() loads all lines in memory. To avoid loading all the lines, you could call the external sort command or implement it in Python
How might this replace the existing file?
2

Using pathlib you can use:

from pathlib import Path

file = Path("shopping.txt")
print(sorted(file.read_text().split("\n")))

Or if you want to sort the file on disk

from pathlib import Path

file = Path("shopping.txt")
file.write_text(
    "\n".join(
        sorted(
            file.read_text().split("\n")
        )
    )
)

1 Comment

Second option did not change anything in the file.
0

try this

shopping = open('shopping.txt')
lines = shopping.readlines()
lines.sort()
for line in lines:
    print(line)

1 Comment

Need to close opened file after this or use with statement as external context manager
0

This code reads the file, sorts the lines and writes it back to the file system, without any lib (not even standard lib except the built-in functions). The other answers don't output the results or use any libs for output (pathlib, etc.), or they only print it to the command line.

input_file = "input.txt"
output_file = "output.txt"
with open(input_file) as f:
    with open(output_file, "w") as o:
        o.write("\n".join(sorted(f.read().splitlines())))

You can also put this inside a function if you have to rename multiple files:

def sort_file(input_file, output_file):
    with open(input_file) as f:
        with open(output_file, "w") as o:
            o.write("\n".join(sorted(f.read().splitlines())))

sort_file("input.txt", "output.txt")

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.