如何使用 glob.glob(path) 以自然排序顺序遍历文件夹中的文件?

How can one iterate through files in folder in natural sort order using glob.glob(path)?

我目前正在尝试做一些非常基本的事情:计算 .csv 文件中两个单元格的总和并将其输出到新的 DataFrame 中。然后,我对该 .csv 文件中的多行和文件夹中的多个文件重复此操作。毕竟,我将 DataFrame 输出到 .xlsx 文件。代码主体如下:

for fname in glob.glob(path):
    print(fname)
    processed = []
    df = pd.read_csv(fname)
    for index, row in df.iterrows():
        processed.append(row['Rejected'] + row['Sorted'])
    heatMap[str(counter)] = processed
    counter += 1

newfname = 'Output.xlsx' heatMap.to_excel(newfname)

但是,当我查看新创建的 DataFrame 时,列乱序了。检查控制台,我可以看到文件是按字母数字顺序迭代的。

Console output

我想知道如何调整我的方法,以便我可以按自然排序顺序(1、2、3、4、5 等)遍历文件,这样我就不必更改每个文件的名称。

谢谢!

for fname in sorted(glob.glob(path)):
    ...

这使得 glob 迭代成为一个列表,因此我们可以使用 python sorted 关键字对其进行排序。然后您可以按字母顺序遍历它。

对于自然排序,有一个 natsort 包。

from natsort import natsorted
for fname in natsorted(glob.glob(path)):
    ...