获取目录中所有文件名的列表及其原始文件夹顺序

Get list of all file names in a directory with its original in folder order

我想获取目录中所有文件名的列表,但文件的顺序对我很重要。 (如果重要的话,我正在使用 Google Colab


P.S: I've accepted the first answer, but just in case know that when I moved my files from google drive to my local PC and run the code, it worked and printed those with the original order. I think there is something with the Google Colab


假设我的文件在我的目录中按以下顺序排列:

file1.txt
file2.txt
file3.txt
...
filen.txt

P.S: These file names are just examples to be clear. In reality my filenames don't have any pattern to be sorted, they are like 1651768933554-b6b4deb3-f245-4763-b38d-71a4b19ca948.wav

当我通过此代码获取文件名时:

import glob
for g in glob.glob(MyPath):
  print(g)

我会得到这样的东西:

file24.txt
file5.txt
file61.txt
...

我想按照文件在文件夹中的顺序获取文件名。

我尽可能地进行了搜索,但没有找到任何 SO post 解决我的问题。感谢任何帮助。

P.S:我也试过from os import listdir但是没用。

它们在文件夹中的存在方式并不是真正的问题。实际上,它们都位于内存中的某个位置,不一定以任何方式彼此相邻。 GUI 通常按字母顺序显示它们,但通常也有过滤器,您可以单击以按照您选择的任何方式对它们进行排序。

他们以这种方式打印的原因是因为它是按字母顺序排列的。按字母顺序 25 之前所以 245.

之前

虽然我同意其他评论,但可以选择使用自然语言排序。这可以通过 natsort 包来完成。

>>> from natsort import natsorted
>>> files = ['file24.txt', 'file5.txt', 'file61.txt']
>>> sorted_files = natsorted(files)
>>> sorted_files
['file5.txt', 'file24.txt', 'file61.txt']

编辑: 抱歉,我之前没有在包裹中看到这个。更好地满足您的需求,请参阅 natsort 中的 os_sorted

>>> from natsort import os_sorted
>>> files = ['file24.txt', 'file5.txt', 'file61.txt']
>>> sorted_files = os_sorted(files)
>>> sorted_files
['file5.txt', 'file24.txt', 'file61.txt']

或者,本质上 os.listdir()...

>>> sorted_directory = os_sorted(os.listdir(directory_path))