gpt4 book ai didi

python - 返回目录中特定格式的最新文件

转载 作者:行者123 更新时间:2023-11-30 23:29:31 25 4
gpt4 key购买 nike

我有一个包含以下格式文件的目录:

test_report-01-13-2014.11_53-en.zip
test_report-12-04-2013.11_53-en.zip

我需要根据文件名中的日期而不是文件上次触摸的日期返回最后一个文件。如果我这样做,我最终可能会得到 2013 年的文件,这是错误的。我正在执行以下操作,但它不起作用。我传递以下参数:

mypath = "C:\\temp\\test\\"
mypattern = "test_report-%m-%d-%Y*"
myfile = getLatestFile(mypath, mypattern)

def getLatestFile(path="./", pattern="*"):
fformat= path + pattern
archives = glob.glob(fformat)

if len(archives) > 0:
return archives[-1]
else:
return None

知道问题的原因是什么吗?

最佳答案

glob 以任意顺序返回匹配的路径,并且它不理解 %m-%d-%Y (它不是太聪明了)。

您需要读取路径列表,提取文件名,然后从文件名中获取日期。这将是您用来对文件列表进行排序的键。

这是一种实现此目的的方法:

import glob
import os
import datetime

def sorter(path):
filename = os.path.basename(path)
return datetime.datetime.strptime(filename[12:22], '%m-%d-%Y')

pattern = "test_report-*"
search_path = r'C:\temp\test\' # or 'c:/temp/test/'

file_list = glob.glob(pattern+search_path)

# Order by the date
ordered_list = sorted(file_list, key=sorter, reverse=True)

os.path.basename是一个返回路径最后一个组成部分的函数;由于 glob 将返回完整路径,因此最后一个部分将是文件名。

由于您的文件名具有固定格式 - 我没有使用正则表达式,而是通过切片文件名来获取日期部分,并将其转换为日期时间对象。

最后,sorted 返回排序结果(正常的sort方法是就地排序)。关键函数是提取日期并返回,需要reverse=True才能按照最新的在前的顺序获取返回的列表。

您可以通过将 glob.glob 的结果直接传递给排序来缩短代码:

ordered_list = Sorted(glob.glob(pattern+search_path), key=sorter,verse=True)

要将其与您编写的函数结合起来:

import glob, os, datetime

def sorter(path):
filename = os.path.basename(path)
return datetime.datetime.strptime(filename[12:22], '%m-%d-%Y')

def getLatestFile(path="./", pattern="*"):
fformat = path + pattern
archives = glob.glob(fformat)

if len(archives):
return sorted(archives, key=sorter, reverse=True)[0]

关于python - 返回目录中特定格式的最新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com