iT邦幫忙

0

python os.rename 問題

  • 分享至 

  • xImage

想抓取影片檔的拍攝日期,之後更改檔名。
但程式跑到rename時直接停住,也沒有跳出錯誤訊息,想請前輩們幫忙看一下是哪裡出錯...


#取得影片檔建立日期(mp4 mov)
import os
import time
import pytz
import datetime
from win32com.propsys import propsys, pscon

movPath = r"D:\test"

for filename in os.listdir(movPath):
    old_path = os.path.join(movPath, filename)

    properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
    dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())

    new_name = dt[0:10] + "_" + filename

    new_path = os.path.join(movPath, new_name)

    print(old_path, " -> " ,new_path)

    os.rename(old_path, new_path) ##### 程式到這行不運行,也沒出現錯誤
    
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
uobik
iT邦新手 4 級 ‧ 2021-08-06 05:21:59
最佳解答

可能是檔案鎖住了,試試properties用完就刪除它

    properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
    dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())
    del properties

另一種解決方法

wd_811 iT邦新手 5 級 ‧ 2021-08-06 13:49:01 檢舉

uobik這個方式成功耶!!
想請教,您說"檔案鎖住"是什麼意思呢?

uobik iT邦新手 4 級 ‧ 2021-08-06 20:01:23 檢舉

請參考
PyWin32 docs
MS docs (GPS_NO_OPLOCK部分)
使用propsys.SHGetPropertyStoreFromParsingName會鎖定目標檔案(opportunistic locks)
可試試運行原本會卡住的代碼,卡住的當下直接對檔案F2改名也是沒反應的

0
japhenchen
iT邦超人 1 級 ‧ 2021-08-06 08:13:28

開個try ... except... 先跳過處理他,稍候再變更名稱


#取得影片檔建立日期(mp4 mov)
import os
import time
import pytz
import datetime
from win32com.propsys import propsys, pscon

movPath = r"D:\test"

for filename in os.listdir(movPath):
    old_path = os.path.join(movPath, filename)

    properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
    dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())

    new_name = dt[0:10] + "_" + filename

    new_path = os.path.join(movPath, new_name)

    print(old_path, " -> " ,new_path)
    try :
        os.rename(old_path, new_path) ##### 程式到這行不運行,也沒出現錯誤
    except Exception as e :
        print(f"更名失敗:錯誤內容{e}")
    
wd_811 iT邦新手 5 級 ‧ 2021-08-06 13:43:30 檢舉

這個方式失敗,感覺不像是錯誤,所以並沒有出現錯誤訊息。

我要發表回答

立即登入回答