lundi 26 avril 2021

Sorting lines by keyword and grouping results by categories

Sorry for maybe so stupid question, but: I have a inputs 1 from txt file and I sort inputs to categories by keyword and get output 1, but if I try input 2 without content for one of categories I get output 2

Code:

def my_sort(conts):
    social_folders = {'engine': 1, 'wormix_mm': 2, 'wormix_ok': 3}
    line_fields = conts.strip().split("/")
    social = line_fields[3]
    return social_folders[social]


numbers = 'First', 'Second', 'Third'#, 'Fourth'
folds = ['engine', 'wormix_mm', 'wormix_ok']
with open('./testsort.txt') as testsortf, open('./test_out999.txt', "w") as test_out:
    contents = testsortf.readlines()
    contents[-1] = f'{contents[-1]}\n'
    contents.sort(key=my_sort)
    # It needs 2 for loops
    for k, fold in enumerate(numbers):
        # Put enter before every category, except the first one
        if k != 0:
            test_out.write(f'\n')
        # Put the label of each category
        test_out.write(f'{numbers[k]}:\n')
        for i, line in enumerate(contents):
            # Put the right label in each category
            if line.strip().split("/")[3] == folds[k]:
                test_out.write(f'{line}')

My inputs 1:

https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/wormix_ok/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/wormix_ok/preloader/somefold4
https://markus.rmart.ru/wormix_mm/preloader/somefold2
https://markus.rmart.ru/wormix_mm/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5
https://markus.rmart.ru/wormix_mm/preloader/somefold5
https://markus.rmart.ru/wormix_ok/preloader/somefold1

My output 1

First:
https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5

Second:
https://markus.rmart.ru/wormix_mm/preloader/somefold2
https://markus.rmart.ru/wormix_mm/preloader/somefold1
https://markus.rmart.ru/wormix_mm/preloader/somefold5

Third:
https://markus.rmart.ru/wormix_ok/preloader/somefold1
https://markus.rmart.ru/wormix_ok/preloader/somefold4
https://markus.rmart.ru/wormix_ok/preloader/somefold3

My inputs 2:

https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/wormix_mm/preloader/somefold2
https://markus.rmart.ru/wormix_mm/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5
https://markus.rmart.ru/wormix_mm/preloader/somefold5

My output 2:

First:
https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5

Second:
https://markus.rmart.ru/wormix_mm/preloader/somefold2
https://markus.rmart.ru/wormix_mm/preloader/somefold1
https://markus.rmart.ru/wormix_mm/preloader/somefold5

Third:

So, in second case I get nothing in the third category, but title of third category are exist What condition I must add for this output?

Input:

https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5

Desired output:

First:
https://markus.rmart.ru/engine/preloader/somefold
https://markus.rmart.ru/engine/preloader/somefold3
https://markus.rmart.ru/engine/preloader/somefold1
https://markus.rmart.ru/engine/preloader/somefold2
https://markus.rmart.ru/engine/preloader/somefold5

So, if second and third category is empty, titles for this categories does not print

Aucun commentaire:

Enregistrer un commentaire