Как отсортировать имена файлов в папке, содержащей подпапки рекурсивно, используя Python - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в Python и использую Databricks.У меня есть папка с несколькими подпапками, содержащая файлы с именами файлов, которые выглядят следующим образом:

Input (A_B)
=====
1_1.json.gz
1_22.json.gz
7_33.json.gz
1_4.json.gz
2_1.json.gz
2_22.json.gz
9_33.json.gz
2_4.json.gz

Как извлечь из целого имени оба целых числа и использовать их для сортировки следующим образом:

Output (Order by B Asc, A Desc)
======
2_1.json.gz
1_1.json.gz
2_4.json.gz
1_4.json.gz
2_22.json.gz
1_22.json.gz
9_33.json.gz
7_33.json.gz

Я попробовал следующий код, но не смог получить ожидаемый результат:

import os
from os import path
path = '/dbfs/FileStore/MainFolder'
arrayfiles = []
for root,dirs,files in os.walk(path):
   for file in files:
      if file.endswith('.json.gz'):
         print(file)
         arrayfiles.append(file)
print(arrayfiles)
arrayfiles.sort()
print(arrayfiles)

У меня снова похожий вопрос, если вы можете помочь мне в этом, это было бы здорово. Так что вВведенный выше ввод позволяет обрабатывать целое число перед подчеркиванием как «A», а после подчеркивания - как «B», а вывод, который вы мне помогли, сортировать по (B Asc, A Desc). Как можно сортировать по B, A или B Desc и A Ascn?Могу ли я использовать этот же пузырьковую сортировку?- Что если вместо целых чисел, если у меня есть строка .. как я могу отсортировать то ??

1 Ответ

0 голосов
/ 22 февраля 2019

Попробуйте этот алгоритм сортировки пузырьков:

def custom_bubble_sort(arr):
    def swap(i, j):
        arr[i], arr[j] = arr[j], arr[i]

    def getFirstNum(st):
        return int(st.split(".")[0].split("_")[0])

    def getSecondNum(st):
        return int(st.split(".")[0].split("_")[1])

    n = len(arr)
    swapped = True

    x = -1
    while swapped:
        swapped = False
        x = x + 1
        for i in range(1, n-x):


            if getSecondNum(arr[i - 1]) > getSecondNum(arr[i]):
                swap(i - 1, i)
                swapped = True
            elif getSecondNum(arr[i - 1]) == getSecondNum(arr[i]):
                if getFirstNum(arr[i - 1]) < getFirstNum(arr[i]):
                    swap(i - 1, i)
                    swapped = True

    return arr



a = ['1_1.json.gz',
    '1_22.json.gz',
    '7_33.json.gz',
    '1_4.json.gz',
    '2_1.json.gz',
    '2_22.json.gz',
    '9_33.json.gz',
    '2_4.json.gz']

print(custom_bubble_sort(a))
...