2015-03-18 6 views
0

Я пытаюсь написать сценарий на Python, чтобы загрузить серию фотографий в зависимости от дат, которые они были созданы. У меня возникла проблема сравнения дат каждого из файлов с датой до и после дат, которые я хочу, чтобы я мог создать массив для прокрутки для моей загрузки. Вот что у меня есть:Сравнение дат файла в каталоге

from stat import S_ISREG, ST_CTIME, ST_MODE 
import os, sys, time, datetime 

array = [] 

area = "/home/user/blah" 
# Edit the path to match your desired folder between the "" 
os.chdir(area) 
retval = os.getcwd() 
# Puts you in the desired directory 

dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.' 
entries = (os.path.join(dirpath, fn) for fn in os.listdir(dirpath)) 
entries = ((os.stat(path), path) for path in entries) 
entries = ((stat[ST_CTIME], path) 
      for stat, path in entries if S_ISREG(stat[ST_MODE])) 

for cdate, path in sorted(entries): 
    filedate = time.ctime(cdate) 
    if filedate < datetime.date(2015,03,13) and filedate > datetime.date(2015,02,17): 
     print time.ctime(cdate) 
     print os.path.basename(path) 

Есть ли способ сделать это с помощью ctime или есть лучший способ?

+0

Какую версию Python вы используете? –

ответ

0

ctime возвращает представление строки, если вы хотите сравнить со временем, вы должны сравнить класс timestamp или datetime.

for cdate, path in sorted(entries): 
    # compare by timestamp 
    #if cdate < time.mktime(datetime.date(2015,03,13).timetuple()) and \ 
    # cdate > time.mktime(datetime.date(2014,02,17).timetuple()): 

    # compare by datetime 
    filedate = datetime.datetime.fromtimestamp(cdate) 
    if filedate < datetime.datetime(2015,03,13) and \ 
      filedate > datetime.datetime(2014,02,17): 
     print time.ctime(cdate) 
     print os.path.basename(path) 
+0

О, круто, я подумал, что оттуда будет работать только с timedelta. Круто, я только что кое-что узнал. Благодаря! – Illyduss

0

Здесь нет реальной необходимости os.chdir(). Работа с абсолютными именами файлов прекрасна. Вы можете упростить критерии отбора с использованием списка-Comp, datetime, os.path.isfile и os.path.getctime, например:

import os 
from datetime import datetime 

files = [ 
    fname 
    for fname in sorted(os.listdir(dirpath)) 
    if os.path.isfile(fname) and 
    datetime(2015, 2, 17) <= datetime.fromtimestamp(os.path.getctime(fname)) <= datetime(2015, 3, 13) 
] 

Это возвращает список всех файлов между двумя датами ...

Я предполагаю, что Вы» re using Python 2.x, потому что иначе datetime.date(2015,03,13) будет давать вам SyntaxError в 3.x. Будьте осторожны с этим, так как 03 - это восьмеричный литерал, и просто случается работать в вашем случае - но 08/09 сломается, поскольку они недействительны для восьмеричного.