如何改善在Python中移动不包含特定日期的所有文件?

时间:2018-09-20 01:23:02

标签: python regex python-3.x shutil

我要移动所有不是从今天开始的文件,我的代码如下,我可以更快地改善它吗?

today = datetime.datetime.today().strftime('%Y%m%d')
all_files = os.listdir(image_current_path)
for i, image_file in enumerate(all_files):
    if not image_file.startswith(today):
        image_file = os.path.join(image_current_folder, image_file) # added
        shutil.move(image_file, image_old_path)

1 个答案:

答案 0 :(得分:1)

您可以首先获取今天开始的POSIX时间戳,然后使用os.path.getmtime()获取每个文件的最后修改时间的时间戳以进行比较:

from datetime import datetime, date, time
import os

today = datetime.combine(date.today(), time.min).timestamp()
for image_file in os.listdir(image_current_path):
    path = os.path.join(image_current_path, image_file)
    if os.path.getmtime(path) < today:
        shutil.move(path, image_old_path)

但是,与其在目录中的每个文件上都不使用os.listdir()并调用os.path.getmtime(),而是一种更有效的方法是使用os.scandir()(请参见PEP-471),在对象的给定目录中缓存所有文件条目的属性,因此无需对每个文件条目进行额外的系统调用:

from datetime import datetime, date, time
import os

today = datetime.combine(date.today(), time.min).timestamp()
for image_file in os.scandir(image_current_path):
    if image_file.stat().st_mtime < today:
        shutil.move(os.path.join(image_current_path, image_file.name), image_old_path)