删除特定文件的有效方法

时间:2013-04-25 13:09:25

标签: python performance bash

我有一个Python程序,每次迭代都会在不同的文件夹中生成大量文件。 每次迭代后,我想删除特定文件夹中的某种文件:例如,应删除所有具有此扩展名*.recode.vcf的文件。

我试过

os.remove(example.recode.vcf)

...但是由于查找文件的文件夹最终可能包含大量文件,我想知道哪种文件最有效。 作为替代方案,我考虑过调用bash find函数。有点像...

find . -name \*.recode.vcf -type f -delete

您怎么看?

3 个答案:

答案 0 :(得分:4)

如果“效率”是指速度,那么请注意,此操作的速度由文件系统(OS +硬件)决定,而不是实现语言。您可以使用glob

轻松删除大量文件
from glob import glob  # or iglob, see documentation

for f in glob("*.recode.vcf"):
    os.remove(f)

(这不会递归到子目录中;请使用os.walk。)

答案 1 :(得分:1)

首先,在要求解决方案之前,检查您的方法之间是否存在真正的差异。也许没有,你正在浪费时间来解决确实存在的问题。

当您在python中remove一个文件时,它不会自行删除它,而是要求操作系统删除该文件( good )。因此,您可以构建一个简单的函数(或更好的iterator),它将以递归方式返回您删除的文件,它将是您find的pythonish版本。谁知道,也许find在python中实现......? (好吧,不是,但可能是)

请参阅其他答案中提到的walkglob

修改

个文件的情况,将它们分成不同的目录。而不是将10,000个文件塞进一个目录,最好放100个目录,每个目录100个文件。要平衡文件之间的文件,请从文件名或文件内容的最后两个字母生成文件名(类似于git所做的那样)

答案 2 :(得分:0)

我通常喜欢密切控制我如何删除文件,因此我建议列出您要删除的所有文件,然后将其逐个删除:

import glob, os
myfiles=glob.glob("/mydirectory/*.vcf")
for file in myfiles:
  os.remove(file)

干杯,特隆德