使用Python从目录获取单个文件的最有效和最快速的方法是什么?从目录中获取单个文件的最有效/最快的方法
关于我的具体问题的更多细节:
我有一个包含大量预生成文件的目录,我只想随机选择一个目录。因为我知道从一个目录中选取一个随机文件没有真正有效的方法,除了首先列出所有文件之外,我的文件是以一个已经随机的名字生成的,因此它们已经被随机排序了,我只需要选择第一个文件夹中的文件。
所以我的问题是:如何从我的文件夹中选择第一个文件,而无需从目录加载整个文件列表(也没有操作系统这样做,我的最佳目标是强制操作系统只是给我一个单一的文件,然后停止!)。
注意:我的目录中有很多文件,因此为什么我想避免列出所有文件以选择一个文件。注意2:每个文件只选择一次,然后删除,以确保下次只有新文件被选中(从而确保某种随机性)。
SOLUTION
我最终选择使用将存储的索引文件:
- 要被拾取的当前文件的索引(例如:1 file1.ext,2 file2的.EXT,等..)
- 产生的最后一个文件的索引(如:1999年file1999.ext)
当然,这意味着我的文件s的不是一个随机名称生成了,但是使用确定性递增的模式(例如:“文件%s.ext”%ID)
因此,我有我的两个主要业务接近恒定的时间:
- 访问文件夹中的下一个文件
- 计算剩余的文件数(以便我可以在需要时在后台线程中生成新文件)。
这是我的问题的具体解决方案,对于更通用的解决方案,请阅读接受的答案。
而且你可能有兴趣进入这两个其他的解决方案,我发现用Python优化的文件和目录行走的访问:只需使用random.choice()
想一想,然后建立你自己的数据库,使其更快? – PearsonArtPhoto
目录*不*排序。相反,他们列出当前目录结构顺序(磁盘结构)中的项目,这可能是创建顺序。 –
我避免使用DBMS的原因,因为我不需要任何排序的任何索引。我不想选择特定的文件,只是任何文件,只有一个文件。 @Martijn:我说的是一个简化,以更好地传达我的想法。文件按inode排序,但这不是重点:我只想得到第一个文件,因为我的文件已经是随机的了,所以我不必在意随机选择一个文件:只选择此目录中的任何文件给我一个随机的结果。 – gaborous