我对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)
关于如何更好地实施它的任何建议?
我希望按年,月和日提供文件名的排序列表。
答案 0 :(得分:2)
您可以定义一个排序键函数,它返回您要排序的字段:
2017-05-11 09:20:07.383254: W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:1152] Unknown: NewRandomAccessFile failed to Create/Open: E:\Yared\tensorflow-deeplab-resnet-master\pro : Access is denied.
; Input/output error
或者,正如@Klaus D所说,在搜索关键字中使用DROP TYPE testname1
:
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)