Установить имя файла с авто-номером - PullRequest
0 голосов
/ 25 января 2019

Python новичок здесь: я написал скрипт, который создает файл каждые 3 минуты, я использовал strftime, чтобы установить имя в соответствии с датой / временем его создания:

dt = datetime.now()
dtTemp = dt.strftime('%d-%b-%Y - %H-%M-%S')
filename = '/home/pi/baby_lapse/%s.jpg' % dtTemp

Вот пример вывода:

18-Jan-2019 - 23-21-03.jpg

Проблема в том, что, если у меня есть более одного месяца файлов, это создает проблемусортировать файлы по имени файла , что для меня важно.

Чтобы решить эту проблему, я подумал добавить некоторый автоматический номер перед строкой strftime, чтобы он выдал такой вывод:

000 - 18 января 2019 - 23-21-03.jpg

001 - 18 января 2019 года - 23-24-03.jpg

002 - 18 января 2019 года - 23-27-03.jpg

Как этого достичь?

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Я решил последовать предложению @ chepner и использовал 2019-01-18 в качестве формата даты.

После установки формата даты для будущих записей мне пришлось выполнить исправление и исправление данныхнаименование существующих записей.

Я закончил писать свой собственный скрипт, который конвертирует имена файлов из этого 18-Jan-2019 - 23-21-03.jpg формата в 2019-01-18 - 23-21-03.jpg, я делюсь им, если у кого-то есть похожий сценарий:

import os
Months = {
    "Jan": "01",
    "Feb": "02",
    "Mar": "03",
    "Apr": "04",
    "May": "05",
    "Jun": "06",
    "Jul": "07",
    "Aug": "08",
    "Sep": "09",
    "Oct": "10",
    "Nov": "11",
    "Dec": "12"
}

for filename in os.listdir("."):
  originalDateTime = filename.split(' ') #example: 18-Jan-2019 - 23-21-03.jpg
  date = originalDateTime[0] #18-Jan-2019
  datesplit = date.split('-') # '18', 'Jan', '2019'
  dayOfMonth = datesplit[0] #18
  month = datesplit[1] #Jan
  year = datesplit[2] #2019
  newFileName = year + '-' + Months.get(month, "none") + '-' + dayOfMonth + ' - ' + originalDateTime[2]
  print newFileName # 2019-01-18 - 23-21-03
  os.rename(filename, newFileName)
0 голосов
/ 26 января 2019

Я думаю, что лучшей идеей было бы изменить форматирование даты на числовой формат, такой как %Y-%m-%d %H:%M:%S.Таким образом было бы легко отсортировать файл по имени.Например,

/home/pi/baby_lapse/2019-01-26 20:51:42.jpg
/home/pi/baby_lapse/2019-01-26 20:51:43.jpg

и так далее ...

Только что попробовал пример сценария с учетом вашего случая, я получил более читаемый результат

Код

for _ in range(10):
    dt = datetime.now()
    dtTemp = dt.strftime('%Y-%m-%d %H:%M:%S')
    filename = '/home/pi/baby_lapse/%s.jpg' % dtTemp
    print(filename)
    time.sleep(0.5)

Результат

/home/pi/baby_lapse/2019-01-26 20:51:42.jpg
/home/pi/baby_lapse/2019-01-26 20:51:43.jpg
/home/pi/baby_lapse/2019-01-26 20:51:43.jpg
/home/pi/baby_lapse/2019-01-26 20:51:44.jpg
/home/pi/baby_lapse/2019-01-26 20:51:44.jpg
/home/pi/baby_lapse/2019-01-26 20:51:45.jpg
/home/pi/baby_lapse/2019-01-26 20:51:45.jpg
/home/pi/baby_lapse/2019-01-26 20:51:46.jpg
/home/pi/baby_lapse/2019-01-26 20:51:46.jpg
/home/pi/baby_lapse/2019-01-26 20:51:47.jpg
0 голосов
/ 25 января 2019

Если вы просто добавляете миллисекунды с начала эпохи, он всегда будет сортироваться по дате. Для удобства чтения вы можете оставить читаемую человеком строку с датой.

Чтобы получить миллисекунды с эпохи, просто используйте time.time() * 1000.

...