2015-08-07 2 views
0

У меня есть список, содержащий список имен файлов, которые я хотел бы отсортировать на основе timestamp, который (i.e timestamp) встроен в каждое имя файла.Python - Сортировка файлов на основе timestamp

Примечание: В файле Hello_Hi_2015-02-20T084521_1424543480.tar.gz -> 2015-02-20T084521 представляет как "год-моль-dayTHHMMSS" (Исходя из этого я хотел бы отсортировать)

входной файл ниже:

file_list = ['Hello_Hi_2015-02-20T084521_1424543480.tar.gz', 
'Hello_Hi_2015-02-20T095845_1424543481.tar.gz', 
'Hello_Hi_2015-02-20T095926_1424543481.tar.gz', 
'Hello_Hi_2015-02-20T100025_1424543482.tar.gz', 
'Hello_Hi_2015-02-20T111631_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T111718_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T112502_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T112633_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113427_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113456_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113608_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113659_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113809_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113901_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113955_1424543485.tar.gz', 
'Hello_Hi_2015-03-20T114122_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T114532_1424543486.tar.gz', 
'Hello_Hi_2015-02-20T120045_1424543487.tar.gz', 
'Hello_Hi_2015-02-20T120146_1424543487.tar.gz', 
'Hello_WR_2015-02-20T084709_1424543480.tar.gz', 
'Hello_WR_2015-02-20T113016_1424543486.tar.gz'] 

Вывод должен быть:

file_list = ['Hello_Hi_2015-02-20T084521_1424543480.tar.gz', 
'Hello_WR_2015-02-20T084709_1424543480.tar.gz', 
'Hello_Hi_2015-02-20T095845_1424543481.tar.gz', 
'Hello_Hi_2015-02-20T095926_1424543481.tar.gz', 
'Hello_Hi_2015-02-20T100025_1424543482.tar.gz', 
'Hello_Hi_2015-02-20T111631_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T111718_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T112502_1424543483.tar.gz', 
'Hello_Hi_2015-02-20T112633_1424543484.tar.gz', 
'Hello_WR_2015-02-20T113016_1424543486.tar.gz', 
'Hello_Hi_2015-02-20T113427_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113456_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113608_1424543484.tar.gz', 
'Hello_Hi_2015-02-20T113659_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113809_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113901_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T113955_1424543485.tar.gz', 
'Hello_Hi_2015-02-20T114532_1424543486.tar.gz', 
'Hello_Hi_2015-02-20T120045_1424543487.tar.gz', 
'Hello_Hi_2015-02-20T120146_1424543487.tar.gz', 
'Hello_Hi_2015-03-20T114122_1424543485.tar.gz'] 

ниже приведен код, который я попробовал.

def sort(dir): 
    os.chdir(dir) 
    file_list = glob.glob('Hello_*') 
    file_list.sort(key=os.path.getmtime) 
    print("\n".join(file_list)) 
    return 0 

Заранее благодарен!

+0

Вы указываете, что пытаетесь сортировать по имени файла, но ваша функция использует getmtime, это время, когда последний файл был последним. https://docs.python.org/release/2.5.2/lib/module-os.path.html#l2h-2177. Вам нужно выбрать подход, либо временную метку файла, либо информацию, закодированную в имени файла, и последовательно преследовать ее. –

+0

@sparky: Я хотел сортировать на основе временной метки, закодированной в имени файла. – HelloR

ответ

0

Ваш код пытается сортировать на основе измененного времени в файловой системе.

С вашего имени файла кодирования нормален :-), если вы хотите отсортировать, основываясь только на имени файла, вы можете использовать:

sorted(os.listdir(dir)) 

Это будет делать, но только потому, что кодирование метки времени в имени файла нормален: с нулевым запасом, номера постоянной ширины, идущие последовательно от самой большой ссылки времени (год) до самой низкой (второй).

0

Будет ли это работать?

Вы могли бы написать содержимое списка в файл построчно и прочитать файл:

lines = sorted(open(open_file).readlines(), key = lambda line :   
line.split("_")[2]) 

Кроме того, вы можете распечатать линии.

1

Так что это сработало для меня, и он отсортировал файлы по времени, в котором не было отметки времени в названии;

import os 
import re 

files = [file for file in os.listdir(".") if (file.lower().endswith('.gz'))] 
files.sort(key=os.path.getmtime) 

for file in sorted(files,key=os.path.getmtime): 
    print(file) 
Смежные вопросы