Python 按年、月和日对字符串排序
我对Python还是个新手 基本问题: 从目录中提取按年、月和日排序的文件名列表 我正在写一个脚本来搜索最新的bak 文件,并将其导入数据库 文件的格式如下: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
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')
可以很好地完成这个任务!谢谢我将尝试实现它,看看它是否有效。是的,这可以很好地完成这个任务!谢谢我将尝试实现它,看看它是否有效。