Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python搜索具有最近时间戳的文件?_Python_Python 2.7 - Fatal编程技术网

如何使用Python搜索具有最近时间戳的文件?

如何使用Python搜索具有最近时间戳的文件?,python,python-2.7,Python,Python 2.7,我在一个文件夹中有以下n个文件 log_20140114-10-43-20_5750.txt log_20140114-10-43-23_5750.txt log_20140114-10-43-25_5750.txt 在这里,所有上述文件的唯一变化是仅时间戳。但是我需要有最新时间戳的文件。我的意思是我只需要“log_20140114-10-43-25_5750.txt”文件 我对python非常陌生。请帮助我如果文件名中已经有时间戳,您可以对名称进行排序并使用列表中的姓氏: lst =

我在一个文件夹中有以下n个文件

 log_20140114-10-43-20_5750.txt
 log_20140114-10-43-23_5750.txt
 log_20140114-10-43-25_5750.txt
在这里,所有上述文件的唯一变化是仅时间戳。但是我需要有最新时间戳的文件。我的意思是我只需要“log_20140114-10-43-25_5750.txt”文件


我对python非常陌生。请帮助我

如果文件名中已经有时间戳,您可以对名称进行排序并使用列表中的姓氏:

lst = os.listdir('.')
lst.sort()
print(lst[-1])

(编辑为包括过滤文件列表并采纳@abarnert的效率建议。)

所说的“时间戳”是指文件名中的时间戳还是实际的操作系统时间戳?@abarnert如果文件名中的“5750”告诉我如何将其作为列表???@user3116273:我不明白你的意思。您是否在询问如何获取当前目录中所有文件的列表,其中包含
5750
?那只是
glob.glob('*5750*')
。它的工作原理与Unix shell相同(与Windows shell没有太大的不同)。请参阅文档中的。如果您已经有了文件名并且只想对其进行过滤,您也可以使用,或者如果您需要更强大的模式(如Jub Bandersnatch的回答),则可以使用
re
。仅为了获得最高的文件名而进行排序既过于复杂又浪费。
max
有什么问题吗?你是对的,因为这个例子
max()
更好
sort()
如果他必须检查那些日志中的某些内容,并且必须按照特定的顺序进行,那么它会很有用。仅仅为了得到最高的一个而进行排序是非常复杂和浪费的。
max
有什么问题吗?
max
的问题是我没有首先想到它!当然,有时候你也需要其他的序号,然后它就有用了。我无法想象他会需要第8、第17和第33个最新的。他可能需要第1、第2和第3个文件(对于这三个文件,
nlargest
仍然比
sort
好得多),但他甚至没有要求。唯一的问题是,如果目录中有其他文件,它们可能总是最大的。@SteveBarnes:是的,在这种情况下,您可能希望
glob
上的
max
,而不是
listdir
(过滤掉其他文件)。(幸运的是,至少你可以指望
.DS\u Store
和其他这样意想不到的隐藏文件永远不会被最大化。)如果你真的想使用
re
,你最好至少
re.compile
它。(然后您可以将
r.search
作为筛选谓词传递,并去掉lambda,整个表达式只有41个字符,而不是多行滚动。)@abarnert谢谢。在这种情况下,我更喜欢re而不是glob,因为你有更多的控制权,而不是因为它更快
glob()
可能仍然是最实用的解决方案。
import os
import re

r = re.compile(r'log_\d{8}-\d{2}-\d{2}-\d{2}_\d{4}\.txt$')

latest_file = \
    max(filter(r.search,os.listdir('/path/to/logs')))

print(latest_file)
import glob

filelist = glob.glob('./log*.txt')
filelist.sort()
print filelist[-1]