比较目录中的文件日期

时间:2015-03-18 01:07:44

标签: python datetime ctime

我正在尝试用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做这个或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

这里没有os.chdir()的真正需要。处理绝对文件名很好。您可以使用list-comp,datetimeos.path.isfileos.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)
]

这将返回两个日期之间所有文件的列表...

我猜你正在使用Python 2.x,否则datetime.date(2015,03,13)会在3.x中给你一个SyntaxError。要警惕,因为03是一个八进制文字,恰好适用于你的情况 - 但是08 / 09会因为八进制无效而中断。

答案 1 :(得分:0)

ctime返回字符串表示,如果要与时间进行比较,则应比较时间戳或日期时间类。

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)