我有一个包含大量子目录和文件的目录,我想在其中找到最近编辑过的文件(它们都应该同时进行编辑。)
到目前为止,我已经设法列出目录中的所有文件,但是尝试对列表进行排序以便我可以获取最新的文件会引发错误,我希望有人可以帮助我了解将要发生的事情上。 :)
到目前为止的代码:
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
有一些关于这个错误的解释,但我看不出它们如何适用于我在这里所做的事情,所以我可以使用一些帮助。
非常感谢!
答案 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命名列表将排序