Python 3.x 如何使用Python对包含子文件夹的文件夹中的文件名进行递归排序

Python 3.x 如何使用Python对包含子文件夹的文件夹中的文件名进行递归排序,python-3.x,databricks,Python 3.x,Databricks,我不熟悉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.j

我不熟悉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排序?我可以使用相同的气泡排序alg吗
如果我有字符串,那么用整数代替呢..我如何排序???

试试这个冒泡排序算法:

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))
def自定义气泡排序(arr):
def交换(i,j):
arr[i],arr[j]=arr[j],arr[i]
def getFirstNum(st):
返回int(st.split(“.”[0]。split(“”)[0])
def getSecondNum(st):
返回int(st.split(“.”[0]。split(“”)[1])
n=长度(arr)
交换=真
x=-1
交换时:
交换=错误
x=x+1
对于范围(1,n-x)内的i:
如果getSecondNum(arr[i-1])>getSecondNum(arr[i]):
互换(i-1,i)
交换=真
elif getSecondNum(arr[i-1])==getSecondNum(arr[i]):
如果getFirstNum(arr[i-1])
试试这个冒泡排序算法:

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))
def自定义气泡排序(arr):
def交换(i,j):
arr[i],arr[j]=arr[j],arr[i]
def getFirstNum(st):
返回int(st.split(“.”[0]。split(“”)[0])
def getSecondNum(st):
返回int(st.split(“.”[0]。split(“”)[1])
n=长度(arr)
交换=真
x=-1
交换时:
交换=错误
x=x+1
对于范围(1,n-x)内的i:
如果getSecondNum(arr[i-1])>getSecondNum(arr[i]):
互换(i-1,i)
交换=真
elif getSecondNum(arr[i-1])==getSecondNum(arr[i]):
如果getFirstNum(arr[i-1])
如果您也能在这方面帮助我,我还有一个类似的问题。因此,在上面的输入中,让我们将下划线前的整数视为“a”,下划线后的整数视为“B”,您帮助我的输出是按(B Asc,a Desc)排序。我如何按B、a或B Desc和a Ascn排序?我可以使用相同的冒泡排序alg吗?是的,只需将“>”替换为“如果你能在这方面帮助我,我还有一个类似的问题,那就太好了。因此,在上面的输入中,让我们将下划线前的整数视为“a”,下划线后的整数视为“B”,并且您帮助我的输出是按(B Asc,a Desc)排序的。如何对B进行排序,A或B描述和Ascn?我可以使用相同的冒泡排序alg吗?是的,只需将'>'替换为'