У вас есть две ошибки.
Первое: у вас есть имя папки, но она не будет получать имена файлов из папки. Вы должны использовать os.listdir()
или glob.glob(...)
, чтобы получить его.
import os
folder = "/Users/akshitarora/Downloads/Akshitpythoncole/"
filenames = os.listdir(folder)
И затем вы должны использовать цикл для отдельного изменения каждого имени файла.
Секунда: дата October 1, 1970
нене подходит для формата %m-%d-%Y
, но для %B %d, %Y
.
И когда вы будете использовать strptime(name, "%B %d, %Y")
, не забудьте удалить расширение файла. ИЛИ используйте расширение в формате "%B %d, %Y.pdf"
. Вы также можете использовать расширение при форматировании нового имени "%m-%d-%Y.pdf"
Когда вы измените имена - using os.rename()
- вы должны помнить, что вам нужно добавить папку к имени файла, чтобы создать полный путь - os.path.join(folder, filename)
Я не тестировал его (потому что у меня нет этой папки и этих файлов), но он должен работать
import os
import datetime
folder = "/Users/akshitarora/Downloads/Akshitpythoncole/"
filenames = os.listdir(folder)
#filenames = ['October 1, 1970.pdf', 'March 27, 1995.pdf']
for name in filenames:
if name.endswith('.pdf'):
dt = datetime.datetime.strptime(name, "%B %d, %Y.pdf")
new_name = dt.strftime("%m-%d-%Y.pdf")
print(new_name)
old_path = os.path.join(folder, name)
new_path = os.path.join(folder, new_name)
Кстати: это не очень хорошая идеяиспользовать переменную с именем datetime
, потому что вы используете модуль с тем же именем datetime
и используете переменную с этим именем, у вас нет доступа к модулю.
РЕДАКТИРОВАТЬ: Проблема с именами '1 октября 1972 г. A.pdf', '1 октября 1972 г. B.pdf'
Я проверяю, имеет ли имя 3 пробела, а затем разделяю его на последний пробел, чтобы получить список с частями ['October 1, 1972', 'A.pdf']
. Теперь я могу преобразовать дату в первой части, а затем соединить ее со второй частью, чтобы создать имя 10-01-1972 A.pdf
import datetime
filenames = ['October 1, 1972 A.pdf', 'October 1, 1972 B.pdf', 'October 1, 1972.pdf']
for name in filenames:
if name.endswith('.pdf'):
if name.count(' ') == 3:
parts = name.rsplit(' ', 1) # split on last space
print(' parts:', parts)
dt = datetime.datetime.strptime(parts[0], "%B %d, %Y")
parts[0] = dt.strftime("%m-%d-%Y")
new_name = ' '.join(parts)
else:
dt = datetime.datetime.strptime(name, "%B %d, %Y.pdf")
new_name = dt.strftime("%m-%d-%Y.pdf")
print(name, '->', new_name)