Home > Back-end >  How do I sort a text file after the last instance of a character?
How do I sort a text file after the last instance of a character?

Time:05-10

Goal: Sort the text file alphabetically based on the characters that appear AFTER the final slash. Note that there are random numbers right before the final slash.

Contents of the text file:

https://www.website.com/1939332/delta.html
https://www.website.com/2237243/alpha.html
https://www.website.com/1242174/zeta.html
https://www.website.com/1839352/charlie.html

Desired output:

https://www.website.com/2237243/alpha.html
https://www.website.com/1839352/charlie.html
https://www.website.com/1939332/delta.html
https://www.website.com/1242174/zeta.html

Code Attempt:

i = 0
for line in open("test.txt").readlines(): #reading text file
    List = line.rsplit('/', 1)            #splits by final slash and gives me 4 lists
    dct = {list[i]:list[i 1]}             #tried to use a dictionary 
    sorted_dict=sorted(dct.items())       #sort the dictionary

textfile = open("test.txt", "w")
for element in sorted_dict:
    textfile.write(element   "\n")
textfile.close()
   

Code does not work.

CodePudding user response:

I would pass a different key function to the sorted function. For example:

with open('test.txt', 'r') as f:
    lines = f.readlines()
    lines = sorted(lines, key=lambda line: line.split('/')[-1])

with open('test.txt', 'w') as f:
    f.writelines(lines)

See here for a more detailed explanation of key functions.

CodePudding user response:

def sortFiles(item):
    return item.split("/")[-1]

FILENAME = "test.txt"

contents = [line for line in open(FILENAME, "r").readlines() if line.strip()]

contents.sort(key=sortFiles)

with open(FILENAME, "w") as outfile:
    outfile.writelines(contents)
  • Related