我有这段代码,我希望这些代码可以用于文件系统中的文件列表。目录中的文件名如下所示:
directory/
./file-2014-7-8.info
./file-2014-7-9.info
./file-2014-7-10.info有关守则如下:
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而不改变文件本身的名称?有简单的方法吗?
发布于 2014-07-15 21:03:14
这是根据原问题的评论部分提出的意见作出的答复。这是考克斯的功劳,他建议我去找皮皮回购公司。下面是为正确工作而更改的代码:
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)发布于 2014-07-15 19:37:53
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")。
发布于 2014-07-15 19:57:27
您可以使用lambda函数在排序时解析文件名的datetime部分。
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)https://stackoverflow.com/questions/24766561
复制相似问题