【问题标题】:Python list folders list by numeric orderPython按数字顺序列出文件夹列表
【发布时间】:2020-03-03 19:09:16
【问题描述】:

我正在使用此代码获取特定目录中所有文件夹的列表:

TWITTER_FOLDER = os.path.join('TwitterPhotos')
dirs = [d for d in os.listdir(TWITTER_FOLDER) if os.path.isdir(os.path.join(TWITTER_FOLDER, d))]

这是数组:['1','2','3','4','5','6','7','8','9','10','11']

我想按这个顺序获取数组:['11','10','9','8','7','6','5','4','3','2','1']

所以我使用这个代码:

dirs.sort(key=lambda f: int(filter(str.isdigit, f)))

当我使用它时,我得到了这个错误:

int() argument must be a string, a bytes-like object or a number, not 'filter'

知道是什么问题吗?或者我如何以另一种方式对其进行排序? 数组将按数字顺序排序很重要,例如:

12 11 10 9 8 7 6 5 4 3 2 1

而不是:

9 8 7 6 5 4 3 2 12 11 1

谢谢!

【问题讨论】:

    标签: python list directory


    【解决方案1】:

    Filter 返回一个迭代器,您需要将它们重新连接成一个字符串,然后才能将其转换为整数

    dirs.sort(key=lambda f: int(''.join(filter(str.isdigit, f))))
    

    【讨论】:

    • 我真的不明白我需要在哪里插入它
    • @MTA - 我已将代码示例编辑为您问题中的完整行
    【解决方案2】:

    sorted 与键一起使用:

    In [4]: sorted(f, key=lambda x: int(x), reverse=True)
    Out[4]: ['11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1']
    

    或者您可以使用f.sort(key=lambda x:int(x), reverse=True) 进行就地排序。

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 2012-02-17
      • 1970-01-01
      • 2021-10-10
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多