#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 там могут быть скрытые файлы и папки. Я обновил свой ответ.