按年,月和日排序字符串

时间:2017-05-11 13:03:35

标签: 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
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)

关于如何更好地实施它的任何建议?

我希望按年,月和日提供文件名的排序列表。

1 个答案:

答案 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)