我有一堆按数字排序的文件在一个文件夹里,当我尝试使用glob.glob进行排序时,我从来没有得到正确顺序的文件。
文件示例和期望输出排序
folder
------
C:\Users\user\Desktop\folder\1 sample.mp3
C:\Users\user\Desktop\folder\2 sample.mp3
C:\Users\user\Desktop\folder\3 sample.mp3
C:\Users\user\Desktop\folder\4 sample.mp3
C:\Users\user\Desktop\folder\5 sample.mp3
... over 800 files...
我尝试过的,但输出似乎是随机的
files = sorted(glob.glob(f'{os.getcwd()}/*.mp3'), key=lambda x: (os.path.splitext(os.path.basename(x))[0]))
C:\Users\user\Desktop\folder\1 speech.mp3
C:\Users\user\Desktop\folder\10 speech.mp3
C:\Users\user\Desktop\folder\100 speech.mp3
C:\Users\user\Desktop\folder\101 speech.mp3
C:\Users\user\Desktop\folder\102 speech.mp3
C:\Users\user\Desktop\folder\103 speech.mp3
C:\Users\user\Desktop\folder\104 speech.mp3
C:\Users\user\Desktop\folder\105 speech.mp3
C:\Users\user\Desktop\folder\106 speech.mp3
C:\Users\user\Desktop\folder\107 speech.mp3
C:\Users\user\Desktop\folder\108 speech.mp3
C:\Users\user\Desktop\folder\109 speech.mp3
C:\Users\user\Desktop\folder\11 speech.mp3
尝试按日期或大小进行排序并不是解决方案。
更新 之前的所有答案都很好:
l = sorted(glob.glob(f'{os.getcwd()}/*.mp3'), key=len)
l = sorted(glob.glob(f'{os.getcwd()}/*.mp3'), key=lambda x: int(os.path.basename(x).split(' ')[0]))
def get_key(fp):
filename = os.path.splitext(os.path.basename(fp))[0]
int_part = filename.split()[0]
return int(int_part)
l = sorted(glob.glob(f'{os.getcwd()}/*.mp3'), key=get_key)
C:\Users\user\Desktop\folder\10 speech.mp3
比C:\Users\user\Desktop\folder\1 speech.mp3
更长,所以它们将按相同长度排序。 - user13914826files = sorted(glob.glob(f'{images_path}/*.{extension}'), key=lambda a: int(a.replace(images_path + '/', '').replace(f'.{extension}', '')))
。虽然我做了两次替换,但它非常易读和易于理解,希望能对你有所帮助。 - firepol