Невозможно переименовать последний файл каталога с помощью цикла

#python #windows #rename

#python #Windows #переименовать

Вопрос:

Я работаю над функцией переименования, которая индексирует видеофайлы на основе даты их создания. Поскольку дата создания носителя не является метаданными файла, я использую модуль win32com.propsys, он работает полностью, как и ожидалось, до последнего элемента FILES списка, но переходит в цикл для оставшегося одного файла. Я не могу уловить проблему. Было бы очень благодарно за положительные предложения.

 import os
import pytz
import datetime
from win32com.propsys import propsys, pscon
os.chdir(r'H:Study materialPythonpractice')
current_path = r'H:Study materialPythonpractice'
files = os.listdir(current_path)
fi = []
li = []
for f in files:
    properties = propsys.SHGetPropertyStoreFromParsingName(r'H:Study materialPythonpractice' '\' 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
 

Ответ №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 materialPythonpractice', 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])
 

Комментарии:

1. Каталог содержит 7 файлов… Он переименовывает 6 файлов, но переходит в цикл для 1 случайного файла из 7…. Цикл продолжается для 2-й последней строки, где используется rename()

2. @VishwajeetBhagat там могут быть скрытые файлы и папки. Я обновил свой ответ.