我正在尝试用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 :(得分:0)
这里没有os.chdir()
的真正需要。处理绝对文件名很好。您可以使用list-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)
]
这将返回两个日期之间所有文件的列表...
我猜你正在使用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)