【发布时间】:2019-06-30 04:37:44
【问题描述】:
我正在一个只读文件系统上开发一个延时摄影机,它在 USB 记忆棒上写入图像,没有实时时钟和互联网连接,那么我不能使用 datetime 来维护文件的时间顺序并防止覆盖.
所以我可以将图像存储为1.jpg, 2.jpg, 3.jpg 等等,并在 USB 记忆棒上的文件 last.txt 中更新计数器,但我宁愿避免这样做,我正在尝试计算最后一个文件名启动,但是有9.jpg 和10.jpg print(max(glob.glob('/home/pi/Desktop/timelapse/*'))) 返回我9.jpg,而且我认为glob 对于数千个文件会很慢,我该如何解决这个问题?
编辑
我找到了这个解决方案:
import glob
import os
import ntpath
max=0
for name in glob.glob('/home/pi/Desktop/timelapse/*.jpg'):
n=int(os.path.splitext(ntpath.basename(name))[0])
if n>max:
max=n
print(max)
但是每 10.000 个文件大约需要 3 秒,是否有更快的解决方案将文件分成子文件夹?
【问题讨论】:
-
str(max([int(x.rstrip(".jpg") for x in glob.glob('/home/pi/Desktop/timelapse/*')]))+".jpg"为每个文件名剥离 .jpg,然后将它们转换为整数,然后找到最大值,然后放回 .jpg。这假设文件名只是整数,它们都是 .jpg 文件,文件夹中除了它们之外没有别的东西。如果你有更宽松的假设,我可以想出更稳健的策略。注意:这绝不是最快或最好的方法 -
一个目录中的数千个文件总是很慢。我会考虑将文件分隔到不同的目录。也许每次启动都会有新目录?
-
@D_Serg 文件名只是整数,它们都是 .jpg 文件,文件夹中除了它们之外别无其他,最快最好的方法是什么?
-
@AndrejKesely 最好每天制作一个目录但没有时钟我不能,如果订购它为什么会有问题?
-
@Miky,您是否有特定原因避免使用
last.txt?