当前位置: 首页 > 面试题库 >

以升序对目录中的文件名排序

蒋权
2023-03-14
问题内容

我有一个包含jpg和其他文件的目录,所有jpg的文件名中都带有数字。有些文件名中可能包含其他字符串。

例如。

01.jpg

或者可能是

Picture 03.jpg

在Python中,我需要按升序排列所有jpg的列表。这是此代码段

import os
import numpy as np

myimages = [] #list of image filenames
dirFiles = os.listdir('.') #list of directory files
dirFiles.sort() #good initial sort but doesnt sort numerically very well
sorted(dirFiles) #sort numerically in ascending order

for files in dirFiles: #filter out all non jpgs
    if '.jpg' in files:
        myimages.append(files)
print len(myimages)
print myimages

我得到的是这个

['0.jpg', '1.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg',
 '15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '2.jpg', '20.jpg',
 '21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '26.jpg', '27.jpg',
 '28.jpg', '29.jpg', '3.jpg', '30.jpg', '31.jpg', '32.jpg', '33.jpg',
 '34.jpg', '35.jpg', '36.jpg', '37.jpg', '4.jpg', '5.jpg', '6.jpg',
 '7.jpg', '8.jpg', '9.jpg']

显然,它首先盲目地排序最高有效数字。我试过使用,sorted()因为您可以看到它希望能够解决该问题,但没有区别。


问题答案:

假设每个文件名中只有一个数字:

>>> dirFiles = ['Picture 03.jpg', '02.jpg', '1.jpg']
>>> dirFiles.sort(key=lambda f: int(filter(str.isdigit, f)))
>>> dirFiles
['1.jpg', '02.jpg', 'Picture 03.jpg']

这个版本也可以在Python 3中使用:

>>> dirFiles.sort(key=lambda f: int(re.sub('\D', '', f)))


 类似资料:
  • 问题内容: 我在文件夹中有一组文件,所有文件都以相似的名称开头,除了一个。这是一个例子: 我可以列出指定文件夹中的所有文件,但是列表的排列顺序不是频谱编号的升序。示例:执行程序时得到以下结果: 但是这个顺序是不正确的。在Spectrum_999.txt之后应该有Spectrum_1000.txt文件。有人可以帮忙吗?这是代码: 问题答案: 您要的是数字排序。您需要实现一个Comparator并将其

  • 问题内容: 我有一个目录列表,我想为其检索文件名并将它们放在字符串向量中,以便它们以“自然”方式排序。例如应该是。最简单的方法是什么? 在阐述“自然”,我们假设从号码的部分组成的字符串 (N) 和文本 (T) 这样,那么对于和 会,其中 暗示了正确的长期左边项优先。在这种情况下,如果数字在字符串中的相同位置(即),则数字优先于文本字段。 已经有一个库函数可以对字母数字字符串或目录条目进行这种排序吗

  • 问题内容: 这是我的代码,它有效!但我希望能够根据名称,大小,修改日期等对文件列表进行排序 问题答案: 您可以定义许多不同的类来进行不同的比较,例如: 然后,您只需将它们换出: 要么

  • 问题内容: 嗨,我正在尝试读取未排序的文件,并让Java对CSV数据文件的一列进行排序,并将这些结果打印到新文件中。我在此网站上搜索时借用了该解决方案,因为我认为这对我想要完成的工作非常理想。我有282行数据,形式为 这是在csv文件中。当我使用上面的代码时,它在sorted_marks.txt中只给我一行,就像这样 我相信它甚至都没有排序。 我希望将新文件中的所有结果根据其用户ID排序,但没有别

  • 问题内容: 我使用和在目录中显示文件名。但是他们无序。如何分类?语言是C。 问题答案: 在C语言中对事物进行排序的惯用方式是使用该函数。为此,最好安排所有文件名收集到一个指针数组中,然后对数组进行排序。 这虽然不太困难,但是确实需要一些动态数组管理,或者您需要引入静态限制(最大文件名长度,最大文件数)。

  • 也许有更合适的解决方案?:/