我有一个脚本,是为了排序我的照片/视频收藏(Windows)。照片的工作很好,因为他们是由EXIF排序,这是很容易访问。
视频更难,因为我必须获取文件的“Media Creation Date”,据我所知,只有pywin 32才能读取它。然而,一旦我访问了媒体创建日期,shutil.move()
就不工作了。它不会抛出错误,只是无限期地运行,直到我手动杀死脚本:
下面是讨论中的片段:
from datetime import datetime
import exifread
import os
from pathlib import Path
import shutil
from win32com.propsys import propsys, pscon
# get the file list, do stuff with photos, etc
# f is the file
# cr is the path root to which it will be moved
elif str(f).lower().endswith(("mp4", "mov")):
props = propsys.SHGetPropertyStoreFromParsingName(f)
dt = props.GetValue(pscon.PKEY_Media_DateEncoded).GetValue()
year, month = str(dt.year), str(dt.month).zfill(2)
new_fn = dt.strftime("%Y-%m-%d_%H%M%S")
new_fn = f"{new_fn}{os.path.splitext(f)[1]}"
move_path = os.path.join(cr, year, month, new_fn)
print(f"SRC: {f}")
print(f"DESTINATION: {move_path}")
print("----------------------------------")
shutil.move(f, move_path)
它可以正确地打印源文件和目标文件,但是不移动文件。我也尝试了os.rename()
和os.replace()
,结果相同,这说明propsys
方法可能仍然锁定了文件。我如何释放这个文件以便移动?
1条答案
按热度按时间0aydgbwb1#
是的,
propsys
阻止了该文件(您可以在Process Explorer中签入),请尝试删除它: