我要移动所有不是从今天开始的文件,我的代码如下,我可以更快地改善它吗?
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)
答案 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)