Python 使用自动编号设置文件名

Python 使用自动编号设置文件名,python,filenames,auto-increment,Python,Filenames,Auto Increment,Python初学者:我编写了一个脚本,每3分钟创建一个文件,我使用strftime根据创建日期/时间设置名称: dt = datetime.now() dtTemp = dt.strftime('%d-%b-%Y - %H-%M-%S') filename = '/home/pi/baby_lapse/%s.jpg' % dtTemp 下面是一个输出示例: 2019年1月18日-23-21-03.jpg 问题是,一旦我有超过一个月的文件,就会产生一个问题,即按文件名对文件进行排序,这对我很重要

Python初学者:我编写了一个脚本,每3分钟创建一个文件,我使用strftime根据创建日期/时间设置名称:

dt = datetime.now()
dtTemp = dt.strftime('%d-%b-%Y - %H-%M-%S')
filename = '/home/pi/baby_lapse/%s.jpg' % dtTemp
下面是一个输出示例:

2019年1月18日-23-21-03.jpg

问题是,一旦我有超过一个月的文件,就会产生一个问题,即按文件名对文件进行排序,这对我很重要

为了解决这个问题,我想在strftime字符串之前添加一些自动编号,这样它将产生如下输出:

000-2019年1月18日-23-21-03.jpg

001-2019年1月18日-23-24-03.jpg

002-2019年1月18日-23-27-03.jpg


如何实现这一点?

如果您只是在开始时预先设置自历元起的毫秒数,它将始终按日期排序。为了便于阅读,您可以将可读的日期字符串保留在那里

要获得从epoch开始的毫秒数,只需使用
time.time()*1000
我决定按照建议使用
2019-01-18
作为日期格式

在为将来的记录设置日期格式之后,我必须运行一个数据修复程序,并修复现有记录的命名

最后,我编写了自己的脚本,将文件名从
2019年1月18日-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
/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

使用按字典排序的日期格式,如
2019-01-18
。使用yyyy-mm-dd-HH-mm-ss,为每个唯一的yyyy创建文件夹,然后为一年中的每个mm创建一个文件夹,然后将文件保存到这些文件夹中,这对您来说是一个优雅的解决方案吗?对于此类任务,我通常使用yyyymmdd-hhmms格式。
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