簡體   English   中英

無法使用循環重命名目錄的最后一個文件

[英]Unable to rename the last file of the directory using loop

我正在重命名 function ,它根據媒體創建日期對視頻文件進行索引。 由於媒體創建日期不是文件元數據,我正在使用win32com.propsys模塊,它完全按預期工作,直到FILES列表的最后一個元素,但進入剩余文件的循環。 我無法解決這個問題。 非常感謝您提出積極的建議。

import os
import pytz
import datetime
from win32com.propsys import propsys, pscon
os.chdir(r'H:\Study material\Python\practice')
current_path = r'H:\Study material\Python\practice'
files = os.listdir(current_path)
fi = []
li = []
for f in files:
    properties = propsys.SHGetPropertyStoreFromParsingName(r'H:\Study material\Python\practice'+'\\'+f )
    d = properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue()
    fi.append([str(d),f])
fi.sort()
l = [s[1] for s in fi]
for f in files:
    i = l.index(f) + 1
    new_name = str(i)+'-'+ f
    li.append(new_name)
i = 0
for f in files:
    os.rename(f,li[i])
    i+=1

我猜排序文件列表中的最后一項是目錄(可能是'__pycache__'?)。 嘗試檢查它是否真的是一個文件:

...
for f in files:
    if not os.path.isfile(f):
        print(f'not a file: {f}')
        continue
    properties = propsys.SHGetPropertyStoreFromParsingName(
        os.path.join(r'H:\Study material\Python\practice', f) )
    d = properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue()
    fi.append([str(d), f])
...

或者嘗試打印每個文件名和新名稱,看看是否一切正確:

...
for i, f in enumerate(files):
    print(f, 'rename to', li[i])
    os.rename(f, li[i])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM