按创建日期排序文件列表时出现奇怪错误
我一直在跟着这个教程 http://code.activestate.com/recipes/576804-find-the-oldest-or-yougest-of-a-list-of-files/,想把一堆文件按创建日期排序。
但是,当我用下面的代码运行脚本时:
import os
path = 'pages/'
files = sorted(os.listdir(path), key=os.path.getctime)
input(files)
...我遇到了这个错误:
Traceback (most recent call last):
File "C:\ilmiont_server\blog\homepage.py", line 17, in <module>
files = sorted(os.listdir(path), key=os.path.getctime)
File "C:\Python33\lib\genericpath.py", line 64, in getctime
return os.stat(filename).st_ctime
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'rsr.txt'
现在在我查找的 'pages' 目录里,只有一个文件 'rsr.txt'。奇怪的是,当脚本和 'pages' 目录在同一个地方,或者 'pages' 目录是空的时,代码是可以正常工作的。为了说明情况,我想排序的 'pages' 文件夹是在脚本所在文件夹的下一级。请帮我看看到底出了什么问题!
提前谢谢你,Ilmiont。
2 个回答
4
你需要把路径和文件名连接起来,因为 os.listdir()
只给你文件名,而 os.path.getctime()
需要完整的路径:
paths = [os.path.join(path, fname) for fname in os.listdir(path)]
files = sorted(paths, key=os.path.getctime)
5
os.path.getctime
这个函数无法找到 os.listdir
返回的文件,因为 os.listdir
只给你文件的名字,而不包括它们的路径。你需要把文件的路径提供给 os.path.getctime
。
下面的代码应该能解决你的具体问题:
import os
path = 'pages/'
files = sorted(os.listdir(path), key=lambda x: os.path.getctime(path+x))
input(files)
不过,通常使用 os.path.join
来创建文件路径会更安全:
import os
path = 'pages/'
files = sorted(os.listdir(path), key=lambda x: os.path.getctime(os.path.join(path, x)))
input(files)