windows shutil.move()在用pywin32阅读对象后不工作

xu3bshqb  于 2023-01-31  发布在  Windows
关注(0)|答案(1)|浏览(128)

我有一个脚本,是为了排序我的照片/视频收藏(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方法可能仍然锁定了文件。我如何释放这个文件以便移动?

0aydgbwb

0aydgbwb1#

是的,propsys阻止了该文件(您可以在Process Explorer中签入),请尝试删除它:

fpath = r'c:\temp\user\t\test.mp4'
move_path = r'c:\temp\user\t\test moved.mp4'
props = propsys.SHGetPropertyStoreFromParsingName(fpath)
print( props.GetValue(pscon.PKEY_Media_DateEncoded).GetValue() )
del props
shutil.move(fpath , move_path)

相关问题