比较目录中的文件日期
Comparing File Dates in a Directory
我正在尝试在 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 做到这一点,或者有更好的方法吗?
这里没有必要 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)
]
此 returns 两个日期之间所有文件的列表...
我猜您正在使用 Python 2.x,否则 datetime.date(2015,03,13)
会在 3.x 中为您提供 SyntaxError
。请注意这一点,因为 03
是一个八进制文字,恰好适用于您的情况 - 但 08
/09
会中断,因为它们对八进制无效。
ctime return 字符串表示,如果要与时间比较,应该比较时间戳或日期时间 class.
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)
我正在尝试在 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 做到这一点,或者有更好的方法吗?
这里没有必要 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)
]
此 returns 两个日期之间所有文件的列表...
我猜您正在使用 Python 2.x,否则 datetime.date(2015,03,13)
会在 3.x 中为您提供 SyntaxError
。请注意这一点,因为 03
是一个八进制文字,恰好适用于您的情况 - 但 08
/09
会中断,因为它们对八进制无效。
ctime return 字符串表示,如果要与时间比较,应该比较时间戳或日期时间 class.
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)