首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:如何在字符串中按日期时间排序?

python:如何在字符串中按日期时间排序?
EN

Stack Overflow用户
提问于 2014-07-15 19:26:54
回答 4查看 356关注 0票数 0

我有这段代码,我希望这些代码可以用于文件系统中的文件列表。目录中的文件名如下所示:

代码语言:javascript
复制
directory/
    ./file-2014-7-8.info
    ./file-2014-7-9.info
    ./file-2014-7-10.info

有关守则如下:

代码语言:javascript
复制
filetype = '.info'
dir_list = os.listdir(directory)
try:
    latest_file = sorted([i for i in dir_list if i.endswith(filetype)])[-1]
    return latest_file
except Exception as e:
    logging.error("could not find any %s files in the directory: %s" % (filetype, e)

此代码返回7-9.info文件,而不是7-10.info文件。

我如何使它返回7-10而不改变文件本身的名称?有简单的方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-15 21:03:14

这是根据原问题的评论部分提出的意见作出的答复。这是考克斯的功劳,他建议我去找皮皮回购公司。下面是为正确工作而更改的代码:

代码语言:javascript
复制
from natsort import natsorted
filetype = '.info'
dir_list = os.listdir(directory)
try:
    latest_file = natsorted([i for i in dir_list if i.endswith(filetype)])[0]
    return latest_file
except Exception as e:
    logging.error("could not find any %s files in the directory: %s" % (filetype, e)
票数 0
EN

Stack Overflow用户

发布于 2014-07-15 19:37:53

代码语言:javascript
复制
fname_2_ts = lambda fname:time.strptime(os.path.basename(fname),"file-%Y-%m-%d.info")
latest_file = sorted([i for i in dir_list if i.endswith(filetype)],key = fname_2_ts)[-1]

问题是,您比较的是字符串和"1“( "10”的第一部分小于"8“和"9")。

票数 1
EN

Stack Overflow用户

发布于 2014-07-15 19:57:27

您可以使用lambda函数在排序时解析文件名的datetime部分。

代码语言:javascript
复制
import datetime

filetype = '.info'
dir_list = [i for i os.listdir(directory) if i.endswith(filetype)]
try:
    sorted_files = sorted(dir_list, key=lambda x: datetime.datetime.strptime(x[5:-5], "%Y-%m-%d"))
    return sorted_files[-1]
except Exception as e:
    logging.error("could not find any %s files in the directory: %s" % (filetype, e)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24766561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档