按创建日期排序文件列表时出现奇怪错误

1 投票
2 回答
2525 浏览
提问于 2025-04-17 20:23

我一直在跟着这个教程 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)

撰写回答