Изменить формат даты файла PDF в папке - PullRequest
0 голосов
/ 04 ноября 2019

В папке zip есть несколько файлов PDF, и их имена имеют формат October 1, 1970.pdf, March 27, 1995.pdf и т. Д. Я хочу изменить формат каждого файла на YYYY-MM-DD в python

import datetime

date1 = "/Users/akshitarora/Downloads/Akshitpythoncole/"

datetime = datetime.datetime.strptime(date1, "%m-%d-%Y")

print(datetime.strftime("%m-%d-%Y"))

Ошибка:

ValueError: time data '/Users/akshitarora/Downloads/Akshitpythoncole/' 
            does not match format '%m-%d-%Y'

1 Ответ

0 голосов
/ 04 ноября 2019

У вас есть две ошибки.

Первое: у вас есть имя папки, но она не будет получать имена файлов из папки. Вы должны использовать 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)
...