按上次修改排序文件列表

时间:2014-02-22 11:25:03

标签: python

我有一个包含大量子目录和文件的目录,我想在其中找到最近编辑过的文件(它们都应该同时进行编辑。)

到目前为止,我已经设法列出目录中的所有文件,但是尝试对列表进行排序以便我可以获取最新的文件会引发错误,我希望有人可以帮助我了解将要发生的事情上。 :)

到目前为止的代码:

import os 

for path, subdirs, files in os.walk('.'):
    for name in files:
        print sorted(os.path.getmtime(os.path.join(path, name)))

错误:

 line 5, in <module>
  print sorted(os.path.getmtime(os.path.join(path, name)))
 TypeError: 'float' object is not iterable

有一些关于这个错误的解释,但我看不出它们如何适用于我在这里所做的事情,所以我可以使用一些帮助。

非常感谢!

2 个答案:

答案 0 :(得分:1)

import os 

for path, subdirs, files in os.walk('.'):
    for name in sorted(files, key=lambda name:
                    os.path.getmtime(os.path.join(path, name))):
        print name

sorted的第一个参数应该始终是一个序列。这些是sorted将返回的项目,但可能是以不同的顺序。 key参数可以设置为可调用。将为序列中的每个项调用callable。 callable返回的值将用作代理值,根据该代理值对序列中的项进行排序。有关更清晰的解释,请参阅HOWTO Sort

答案 1 :(得分:0)

排序可能需要一个序列      os.path.getmtime 它给出一个浮点值

错误在这里。你写的是这样的    已排序(10.51)#its a error

你必须这样写     排序([8,6,4,9,3])

首先使列表看起来像这样并对其进行排序。      [(时间,路径),(时间,路径),(时间,路径)]

示例代码:

 tosort=[] #make a list
 import os 
 for path, subdirs, files in os.walk('.'):
     for name in files:
         atuple=(os.path.getmtime(os.path.join(path, name)),path)
         tosort.append(atuple)
 tosort.sort()

现在tosort命名列表将排序