使用自动编号设置文件名
Set file name with auto-number
Python 初学者:我写了一个脚本,每 3 分钟创建一个文件,我使用 strftime 根据创建的 date/time 设置名称:
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-Jan-2019 - 23-21-03.jpg
001 - 18-Jan-2019 - 23-24-03.jpg
002 - 18-Jan-2019 - 23-27-03.jpg
如何实现?
如果您只是在开头加上从纪元开始的毫秒数,它总是会按日期排序。为了便于阅读,您可以将人类可读的日期字符串留在那里。
要获取自纪元以来的毫秒数,只需使用 time.time() * 1000
。
我决定遵循 建议并使用 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)
我认为更好的办法是将日期格式更改为数字格式,例如 %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
Python 初学者:我写了一个脚本,每 3 分钟创建一个文件,我使用 strftime 根据创建的 date/time 设置名称:
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-Jan-2019 - 23-21-03.jpg
001 - 18-Jan-2019 - 23-24-03.jpg
002 - 18-Jan-2019 - 23-27-03.jpg
如何实现?
如果您只是在开头加上从纪元开始的毫秒数,它总是会按日期排序。为了便于阅读,您可以将人类可读的日期字符串留在那里。
要获取自纪元以来的毫秒数,只需使用 time.time() * 1000
。
我决定遵循 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)
我认为更好的办法是将日期格式更改为数字格式,例如 %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