如何使用 os.walk 中的 Python 中的 natsort 对文件夹名称进行排序?

How to sort folder names with natsort in Python that I got with os.walk?

我是 Python 的新手。 我必须爬过许多文件夹并检查特定文件。如果此文件在此文件夹中,则文件夹的名称将附加在列表的末尾。之后我希望文件夹的名称自然排序。 我尝试了 natsort 包的 natsorted(filename),但不知何故它没有对列表进行排序。

我的代码:

for dirName, subdirList, fileList in os.walk(folder):
if mat_file in fileList:
    input_path = dirName + r"\file.txt"
    if os.path.isfile(input_path):
        filename.append(str(dirName.strip(folder)))

natsorted(filename)
print filename

folder 是文件夹的路径

我得到了:

['1.1', '1.10', '1.2', '1.4', '1.6', '2.1', '2.10', '2.11', '2.12', '2.6']

我要:

['1.1', '1.2', '1.4', '1.6', '1.10', '2.1', '2.6', '2.10', '2.11', '2.12']

这个问题有解决办法吗?

因为 natsortedsorted 不会像 .sort() 那样改变列表,您需要将 natsorted(filename) 的 return 值分配回filename 变量如:

filename = natsorted(filename)

拆分每个版本字符串以将其作为整数列表进行比较:

filename.sort(key=lambda s: map(int, s.split('.')))

def sort_key(x):
    a, b = x.split('.')
    return int(a), int(b)

sorted(filename, key=sort_key)