Python 按年、月和日对字符串排序

Python 按年、月和日对字符串排序,python,Python,我对Python还是个新手 基本问题: 从目录中提取按年、月和日排序的文件名列表 我正在写一个脚本来搜索最新的bak 文件,并将其导入数据库 文件的格式如下: MyDB_05-09-2017.bak MyDB_05-10-2017.bak 我希望通过文件名提取最新的bak文件 我想按年、月、日对文件进行排序 这是我尝试过的一些基本实现: import glob,os,re from datetime import datetime # SQL server backup directory

我对Python还是个新手

基本问题: 从目录中提取按年、月和日排序的文件名列表

我正在写一个脚本来搜索最新的bak

文件,并将其导入数据库

文件的格式如下:

MyDB_05-09-2017.bak

MyDB_05-10-2017.bak
我希望通过文件名提取最新的bak文件

我想按年、月、日对文件进行排序

这是我尝试过的一些基本实现:

import glob,os,re
from datetime import datetime

# SQL server backup directory
os.chdir('C:\\SQLServerBackups')

# invoke the sql script to drop the database if exists
os.system('C:\\SQLServerBackups\\database_sql_scripts\\drop_database.bat')

# find the latest .bak file and rename it to target

file_list = glob.glob('*.bak')
latest_bak_file = file_list[0]
latest_year = 0
latest_month = 0
latest_day = 0

for file in file_list:
    print(file)
    del_list = re.split('[-._]',file)
    temp_latest_year = int(del_list[3])
    temp_latest_month = int(del_list[1])
    temp_latest_day = int(del_list[2])

    if temp_latest_year > latest_year:
        latest_year = temp_latest_year
        latest_month = temp_latest_month
        latest_day = temp_latest_day
    elif temp_latest_year == latest_year:
        if temp_latest_month > latest_month:
            latest_month = temp_latest_month
            latest_day = temp_latest_day
        elif temp_latest_month == latest_month:
            if temp_latest_day > latest_day:
                latest_day = temp_latest_day
                latest_bak_file = file

print(latest_bak_file)
关于如何更好地实施它,有什么建议吗


我希望有一个按年份、月份和日期排序的文件名列表

您只需定义一个sort key函数,该函数返回要排序的字段:

import re

fnames = [
    "MyDB_05-10-2017.bak",
    "MyDB_05-09-2017.bak",
]

def sortkey(x):
    parts = re.split('[-._]', x)
    return [int(parts[3]), int(parts[1]), int(parts[2])]

sorted_fnames = sorted(fnames, key=sortkey)
或者,正如@Klaus D所说,在搜索键中使用
datetime.strtime

sorted_fnames = sorted(fnames, key=lambda x: datetime.datetime.strptime(x, 'MyDB_%d-%m-%Y.bak'))

您只需定义一个排序键函数,该函数返回要排序的字段:

import re

fnames = [
    "MyDB_05-10-2017.bak",
    "MyDB_05-09-2017.bak",
]

def sortkey(x):
    parts = re.split('[-._]', x)
    return [int(parts[3]), int(parts[1]), int(parts[2])]

sorted_fnames = sorted(fnames, key=sortkey)
或者,正如@Klaus D所说,在搜索键中使用
datetime.strtime

sorted_fnames = sorted(fnames, key=lambda x: datetime.datetime.strptime(x, 'MyDB_%d-%m-%Y.bak'))

哦,亲爱的,但是有一个内置函数,据说我对python非常陌生,我试着看看我是否可以使用这个函数,但我似乎不知道在这种情况下如何使用它。我将再次研究这个函数,看看如何更好地实现它……使用datetime:
datetime.strtime('MyDB_05-09-2017.bak','MyDB_%d-%m-%Y.bak')
Oh dear,但是有一个内置函数,据说我对python非常陌生,我试着看看是否可以使用这个函数,但我似乎不知道在这种情况下如何使用它。我将再次研究这个函数,看看如何更好地实现它……使用datetime:
datetime.strtime('MyDB_05-09-2017.bak','MyDB_%d-%m-%Y.bak')
可以很好地完成这个任务!谢谢我将尝试实现它,看看它是否有效。是的,这可以很好地完成这个任务!谢谢我将尝试实现它,看看它是否有效。