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

时间:2014-02-28 19:28:03

标签: python file sorting date

我一直在关注本教程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'

'rsr.txt'是我搜索的'pages'目录中唯一的文件。奇怪的是它与脚本在同一目录中工作,如果'pages'目录为空。对于上下文,我想要排序的'pages'文件夹比脚本所在的文件夹低一级。请帮我弄清楚出了什么问题!

提前致谢,Ilmiont。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:4)

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)